MongoDB的文档操作总结

在MongoDB中文档是指多个键及其关联的值有序的放置在一起,实际上指的就是数据

MongoDB中的文档的数据结构和Json基本一致,所以存储在集合中的数据都是Bson格式,Bson是一种类似于JSON的二进制的存储格式,是Binary JSON的简称

1、插入文档

1)插入单个文档

①、db.集合名.insert();

db.dev.insert({title:"bjsxt",description:"it sit",url:www.sxt.com})

②、db.集合名.save();

db.dev.save({title:"bjsxt",description:"it sit",url:www.sxt.com})

③、db.集合名.insertOne()

在MongoDB3.2以后的版本中,提供了insertOne函数用于插入文档

2)插入多个文档

向集合中批量插入多个文档时,需要用数组来存放文档

①、db.集合名.insert([{},{},{}])

db.test.insert([{title:'java',tags:['JavaSE','JavaEE','JavaME']},{title:'ORM',tags:['Mybatis','Hibernate']},{title:'Spring',tags:['SpringMVC','SpringBoot','SpringCloud']}])

clipboard

②、db.集合名.insertMany([{},{},{}])

在MongoDB3.2以后的版本中,提供了insertMany()函数用于插入文档

3)通过变量新增文档

Mongo Shell工具允许我们定义变量。所有的变量类型为var类型。也可以忽略变量类型。变量中赋值符号后侧需要使用小括号来表示变量中的值。我们可以将变量作为任意文档插入函数的参数

语法格式: 变量名 = ({变量名})

①、通过变量插入单个文档

定义一个变量,然后通过插入函数,将该文档插入到集合中

clipboard

②、通过变量批量新增文档

语法结构 变量名 = ([{},{},{}])

db.集合名.insertMany(变量名)

2、更新文档

MongoDB通过update函数或者save函数来更新集合中的文档

1)update函数

update()函数用于更新已存在的文档

语法:db.集合.update({查询条件},{更新内容},{更新参数(可选)})

示例:将title为SpringCloud的改为 Spring-Cloud

db.test.update({title:"springcloud"},{title:"Spring_Cloud"})

clipboard

2) 更新操作符

①、$set更新操作符

$set:用来指定一个键并更新键值,若键不存在则创建

语法:db.collection.update({查询条件},{$set:{更新内容}})

示例:将title为Spring-Cloud的改为 SpringCloud

db.test.update( {title:"Spring_Cloud"}, {$set:{title: "SpringCloud"}} )

clipboard

示例:将title为SpringCloud的文档添加一个属性num=1

clipboard

示例:将所有title为SpringCloud的文档添加属性 size:1000

clipboard

②、$inc操作符

$inc:可以对文档中某个值为数字型的键进行增减的操作

示例:将title为SpringCloud的文档的num+1

clipboard

③、$unset操作符

$unset:主要用来删除键

示例:删除title为SpringCloud中的num键

clipboard

④、$push操作符

$push:向文档中的某个数组类型的键添加一个数组元素,不过滤重复的数据。添加时键存在,则要求其值类型必须是数组;键不存在,则创建数组类型的键

示例:向title为SpringCloud的文档中添加 键为tags,值为['SpringCloud Stream']

clipboard

⑤、$pop操作符

$pop操作符:删除数据元素,1表示从数组的尾部删除,-1表示从数组的头部删除

⑥、pull操作符

$pull:从数组中删除满足条件的元素

示例:删除title为SpringCloud文档中 tags中的 SpringCloud Stream

clipboard

⑦、$pullAll操作符

$pullAll:从数组中删除满足条件的多个元素

示例: 删除title为java中的 ,tags中的JavaSE和JavaEE

clipboard

⑧、$rename操作符

$rename:对键进行重新命名

示例:将title为java的文档中的tags改为tag

clipboard

3)使用Save来更新文档

save方法通过传入的文档来替换已有的文档

语法:save({文档})

示例:将上述最后一个文档更新为 tile:SpringData

clipboard

3、删除文档

1)remove()函数

使用remove函数可以删除集合中指定的文档

语法:remove({指定删除条件},删除参数(可选参数))

clipboard

【注意】

如果使用的条件在集合中可以匹配到多条数据,那么remove()函数会删除所有满足条件的数据。我们可以在remove()函数中

给定justOne,表示只删除第一条,在remove函数中给定参数即可

db.test.remove({title:"SpringData"},1)

remove()方法不会真正的释放空间。需要执行db.repairDatabase()来回收磁盘空间

2)deleteOne函数

deleteOne() 函数是官方推荐的删除文档的方法,该方法只删除满足条件的第一条文档

db.test.delete({title:"SpringCloud"})

3)deleteMany()函数

deleteOne() 函数是官方推荐的删除文档的方法,该方法只删除满足条件的所有文档

4)删除集合中的所有文档

①、remove({})

②、deleteMany({})

4、查询文档

1)find()函数

在MongoDB中可以使用find()函数查询文档

语法格式:find({查询条件(可选)},{指定投影的键(可选)})

如果未给定参数则表示查询所有数据

pretty()函数可以使用格式化的方式来显示所有文档

clipboard

2)findOne()函数

findOne()函数只返回满足条件的第一条数据。如果未做投影,则该方法自带格式化功能

语法:findOne({查询条件(可选)},{指定投影的键(可选)})

clipboard

3)MongoDB中的模糊查询

在MongoDB中可以通过 // ^ $ 实现模糊查询,注意使用模糊查询时查询条件不能放到双引号或者单引号中

实例:

查询文档中title值含有a的内容

clipboard

查询文档中title以S开头的文档

^表示起始位置

clipboard

查询文档中title以g结尾的内容

clipboard

4)投影操作

①、find函数投影操作

在find函数中,我们可以指定投影键

语法:find({查询条件},{投影键名:0|1,投影键名:0|1,投影键名:0|1.....})

clipboard

过滤掉_id

clipboard

5)条件操作符

条件操作符用于比较两个表达式并从mongoDB集合中获取数据

语法:find({键:{操作符:条件}})

①、$gt 大于操作符

我们可以使用$gt操作做大于的条件判断。该操作符可以对数字或者日期进行判断

插入数据

clipboard

查询size大于300的文档

clipboard

②、$lt 小于操作符

查询size小于300的文档

clipboard

③、$gte 大于等于操作符

查询size大于等于300的文档

clipboard

④、$lte 小于等于操作符

查询size小于等于300的文档

clipboard

⑤、$eq 等于操作符

查询size等于300的文档

clipboard

⑥、$ne 不等于操作符

查询size不等于300的文档

clipboard

⑦、$and 操作符

我们可以使用$and操作符来表示多条件间的并且关系

语法:find({$and:[{条件1},{条件2},{条件3}}]})

如果在查询中给定了多个查询条件,条件之间默认的关系为and关系

查询size 大于100并且小于300的文档

clipboard

使用$and语法

clipboard

⑧、$or 我们可以使用该操作符来表示多条件间的或者关系

语法:find( { $or:[{条件1},{条件2},....] } )

⑨、$and和$or联合使用

查询title为test5 并且size等于500, 或者size小于200的文档

clipboard

⑩ $type 是基于Bson类型来检索集合中匹配的数据类型

查找title值为number的文档

clipboard

6)分页操作 Limit和skip函数

①、Limit函数

如果需要在MongoDB中读取指定数据的数据记录,可以使用MongoDB的Limit函数,limit函数接受一个数字参数,该参数指定从mongo中读取记录的个数

语法:db.collection.find().limit(num1)

clipboard

②、skip函数来跳过指定数量的数据

语法:db.collection.find().limit(num1).skip(num2)

我们可以使用skip函数和limit函数实现mongoDB分页查询,但是官方并不推荐这样做,因为这样会扫描全部文档,然后再返回结果,效率过低

7)Mongo排序

clipboard

size降序排列

clipboard

原文地址:https://www.cnblogs.com/houchen/p/14961660.html