链接到mongo

新建超级用户

上文中我们提到mongo用户库表管理。为了方便我们先新建一个root权限的用户。

db.createUser({user:'dbadmin',pwd:'123456', roles:[{role:'userAdminAnyDatabase', db:'admin'}]})

使用studio-3t链接到mongo



新建爬虫库

打开连接后,在连接上右键,然后Add Database ->输入数据库名称spider001

spider001在数据库上面右键Manage Users -> Add 然后输入用户密码,再授权。我们还能查看该操作对应的代码。特别注意新建数据库操作其实相当于use dbname 的操作,不会真正新建数据库,只有数据库有用户或者数据时,数据库才回真实存在

use spider001
db.runCommand({
"createUser" : "spider001",
"pwd" : "spideradmin",
"customData" : { },
"roles" : [
{
"role" : "read",
"db" : "spider001"
},
{
"role" : "readWrite",
"db" : "spider001"
}
]
});

CRUD操作

Create or insert

选择spider001数据库,可以用studio 3t打开一个shell终端

#单条
db.user.insert({name:"refly",nikename:"haima",joy:["NBA","football","hiking"]})//不需要建表 #多条
db.user.insertMany([
{
"name":"hailong",age:20,work:{location:"成都",name:"spider"}
},
{
"name":"rob",
"birth":new Date("2020-10-23")
}
])

插入后回自动生成一个_id字段

Read operations

find方法基本应用

db.user.find({}) //查询所有

db.user.find({name:"haima"})    //字段匹配

db.user.find({"_id": ObjectId("5f9297276951ee42b7a44c24")}) //_id字段

db.user.find({age:{$gt:10}})    //筛选age字段大于10岁的

db.user.find({"work.name":"spider"})    //二级对象

db.user.find({"birth":{$gt:new Date("2010-10-23")}})    //日期处理

db.user.find({age:{$exists:false}} )    //查询age字符不存在的 数据

//正则
db.user.find(
{ "name": { $regex: /^.*g$/ } }
) //多条件
db.user.find( {
name:"hailong",
age:20
} ) db.user.find({joy:{$size:3}}) //查询joy(数组)字段 长度为3的数据

关键词

  • $in 数组字段中,有一个满足就满足查询
  • $all 数组字段中,包含所有给出的值 才满足查询
  • $gt greater than 筛选条件 中的 大于
  • $lt less than 筛选条件 中的 小于
  • $lte 小于等于
  • $gte 大于等于
  • $exists 筛选字段是否存在
db.bios.find( { contribs: { $all: [ "ALGOL", "Lisp" ] } } ) //contribs含其 `ALGOL`且包含`Lisp`

db.bios.find( { contribs: { $in: [ "ALGOL", "Lisp" ]} } ) //contribs含其中一个就可以

限制返回值字段

db.user.find( { }, { name: 1 } )    //只返回name字段和 _id字段,_id会默认返回
db.user.find( { }, { name: 1, _id: 0} ) //只返回name字段 db.user.find( { }, { name: true } ) //true,false也可以 //二级字段,只返回work.location字段,当然也会返回work
db.user.find({ },{ _id: 0,"work.location":1 } ) db.user.find({ },{ _id: 0,joy:{$slice:1} } ) //joy字段(数组)中只返回一个元素

常用方法 sort() limit() skip()

sort()排序

db.user.find({   }).sort( { age:-1, name: -1} )  //先按年龄排序,然后再按照名字排序

limit(n) 取前面n条

db.user.find( {   } ).limit(10)   //取10条

skip(n) 跳过前面几条

db.user.find( {   } ).skip(10)   //忽略前10条

min()、max()

暂无解读

count()

db.user.find( {   } ).count()   //统计查询条数

itcount()

也是统计查询条数,区别是itcount()是迭代器中剩余的条数,而.count() 是查询条数

db.user.find({  }).limit(10).count()    //结果为11,表中为11条数据

db.user.find({  }).limit(10).itcount()  //结果为10,迭代器中剩余10条数据

size()

可以统计出skip()和limit()查询过后的元素条数,这个更像itcount()

next()

迭代器返回下一个对象

db.user.find({  }).next()

explain()

查询详情

db.user.find({"work.name":"spider"}).explain()      //感觉并没什么暖用

结果为

{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "spider001.user",
"indexFilterSet" : false,
"parsedQuery" : {
"work.name" : {
"$eq" : "spider"
}
},
"winningPlan" : {
"stage" : "COLLSCAN",
"filter" : {
"work.name" : {
"$eq" : "spider"
}
},
"direction" : "forward"
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "VM_0_8_centos",
"port" : 27017,
"version" : "3.6.20",
"gitVersion" : "39c200878284912f19553901a6fea4b31531a899"
},
"ok" : 1
}

forEach()

遍历执行

db.user.find().forEach(function(el){print(el.name) })

map()

遍历执行,每个执行结果都会返回,组成一个数组对象

db.user.find().map( function(u) { if(u.name!=null)return u.name; } )

Update Operations

updateOne() updateMany()方法

  • updateOne()
db.collection.updateOne(
<filter>, //修改条件
<update>, //修改内容
{
upsert: <boolean>, //没有的话就插入
writeConcern: <document>, //写入策略,暂时不做解读
collation: <document>, //Collation特性允许MongoDB的用户根据不同的语言定制排序规则
arrayFilters: [ <filterdocument1>, ... ]
}
)
db.user.update({_id:ObjectId("5f9297276951ee42b7a44c24")},{$set:{name:"xxx"}})
//执行结果 WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) db.user.update({_id:-1 },{$set:{name:"-1id"}},{ upsert: true })
//执行结果 WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : -1 }) db.user.update({name:"rob"},{$set:{name:"hhhhh"}},{collation: {locale: "zh"}})
//collation 使用,还理解不太清楚
  • arrayFilters用法
//数据为以下
db.students.insert([
{ "_id" : 1, "grades" : [ 95, 92, 90 ] },
{ "_id" : 2, "grades" : [ 98, 100, 102 ] },
{ "_id" : 3, "grades" : [ 95, 110, 100 ] }
])
db.students.updateOne(
{ _id:2 },
{ $set: { "grades.$[element]" : 100 } },
{ arrayFilters: [ { "element": { $gte: 100 } } ] } //只更新grades字段中大于100的数
)

执行后 _id为2数据的更新情况为只更新了grades 大于100的

{
"_id" : 2.0,
"grades" : [
98.0,
100.0,
100.0
]
}
  • updateMany()

    和updateOne()使用方式相同,只是updateMany可以更新多条数据
db.collection.updateMany(
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ]
}
)

replaceOne()方法

使用方式和updateOne()一致,只是会替换整条数据

db.collection.replaceOne(
<filter>,
<replacement>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>
}
)
db.user.replaceOne({_id:-1},{_id:-1,nikename:"xxx",age:2})  //执行后,这条数据中再没有name字段了

Delete Operations

  • deleteOne()、deleteMany()
db.collection.deleteOne(
<filter>,
{
writeConcern: <document>,
collation: <document>
}
) db.collection.deleteMany(
<filter>,
{
writeConcern: <document>,
collation: <document>
}
)
db.user.deleteOne({name:"hailong"}) //单条

db.user.deleteMany({name:"hailong"})    //满足条件的都删除

mongodb 数据操作CRUD的更多相关文章

  1. mongodb数据操作(CRUD)

    1.数据插入db.集合名.insert() 操作 > use hk switched to db hk > show collections > db.info.insert({&q ...

  2. Atitti.数据操作crud js sdk dataServiceV3设计说明

    Atitti.数据操作crud js sdk dataServiceV3设计说明 1. 增加数据1 1.1. 参数哦说明1 2. 查询数据1 2.1. 参数说明2 3. 更新数据2 3.1. 参数说明 ...

  3. ADO.NET访问Access(文本数据库)数据操作(CRUD)

    1,ADO.NET访问Access(文本数据库)数据操作(CRUD) 2,DatabaseDesign 文本数据库Northwind.mdb 3,/App_Code 3.1,/App_Code/DBC ...

  4. 笔记-mongodb数据操作

    笔记-mongodb数据操作 1.      数据操作 1.1.    插入 db.COLLECTION_NAME.insert(document) 案例: db.inventory.insertOn ...

  5. EasyUI-datagrid数据展示+MongoDB数据操作

    使用EasyUI-datagrid进行数据展示:进行添加,修改,删除操作逻辑代码,数据源来自MongoDB. 一.新建SiteInfo控制器,添加Index页面:http://www.cnblogs. ...

  6. MongoDB数据操作之删除与游标处理

    删除数据(比较常用) 范例:清空infos集合中的内容.表.文档.成员. db.infos.remove({"url":/-/}); 默认情况下都删除,第二个条件设为true,只删 ...

  7. SQL Server温故系列(1):SQL 数据操作 CRUD 之增删改合

    1.插入语句 INSERT INTO 1.1.用 INSERT 插入单行数据 1.2.用 INSERT 插入多行数据 1.3.用 INSERT 插入子查询结果行 1.4.INSERT 小结及特殊字段插 ...

  8. SQL Server温故系列(2):SQL 数据操作 CRUD 之简单查询

    1.查询语句 SELECT 1.1.查询语句的 SELECT 子句 1.2.查询语句的 FROM 子句 1.2.1.内连接查询 INNER JOIN 1.2.2.外连接查询 OUTER JOIN 1. ...

  9. Mongodb数据操作基础

    var mongodb = require('mongodb'); var server = new mongodb.Server('localhost', 27017, {auto_reconnec ...

随机推荐

  1. 首发!Alibaba内部:Spring源码培训课件笔记曝光!

    本文包含的内容 Spring占有的市场 阅读源码的重要性 阅读源码困难度 课件笔记的主要内容 Spring占有的市场 先来简单说一下现在各个企业常用并与Spring相关的: ssh = spring ...

  2. Java锁?分布式锁?乐观锁?行锁?

    转载自:公众号来源:码农翻身 作者:刘欣 Tomcat的锁 Tomcat是这个系统的核心组成部分, 每当有用户请求过来,Tomcat就会从线程池里找个线程来处理,有的执行登录,有的查看购物车,有的下订 ...

  3. NX导入DWG失败

    给客户开发的NX导入DWG图纸功能,部分电脑偶尔出现导入失败的情况,且几乎没有规律可言.客户无法理解,坚持认为是代码的问题,毕竟使用的是我们二次开发的功能.我本机没有问题,在某些出问题的电脑上也尝试多 ...

  4. java中的几种基础排序

    import java.util.Random;import java.util.Arrays; public class Puppy {     public static void main(St ...

  5. Hibernate4.3 HQL查询

    HQL:Hibernate专属语言,可以跨数据库 一.基本查询 1 public void testQuery(){ 2 Session session = HibernateUtils.getSes ...

  6. Python练习题 016:猴子吃桃

    [Python练习题 016] 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个.第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到 ...

  7. 072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法

    072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法 本文知识点:综合案例-数组移位-在指定位置处插入数据方法 ...

  8. 02 Writing Your First Program 写你的第一个C程序

    Let's print "Hi" 打印输出"Hi" In your first computer program, let's print something ...

  9. 微服务 | Spring Cloud(一):从单体SSM 到 Spring Cloud

    系列文章目录 微服务 | Spring Cloud(一):从单体SSM 到 Spring Cloud 目录 系列文章目录 前言 单体式架构 微服务架构 优点 缺点 服务发现与弹性扩展 参考 前言 在微 ...

  10. 第2天 | 12天搞定Python,运行环境(超详细步骤)

    倘若有人告诉你,他在学习Python编程,却没有安装运行环境,那你赶紧叫他滚,并离他远点,因为他在欺骗你的感情. 没有安装运行环境,程序根本无法跑起来,对错不能知根知底,试问是在学编程,还是在跟空气对 ...