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']}])
②、db.集合名.insertMany([{},{},{}])
在MongoDB3.2以后的版本中,提供了insertMany()函数用于插入文档
3)通过变量新增文档
Mongo Shell工具允许我们定义变量。所有的变量类型为var类型。也可以忽略变量类型。变量中赋值符号后侧需要使用小括号来表示变量中的值。我们可以将变量作为任意文档插入函数的参数
语法格式: 变量名 = ({变量名})
①、通过变量插入单个文档
定义一个变量,然后通过插入函数,将该文档插入到集合中
②、通过变量批量新增文档
语法结构 变量名 = ([{},{},{}])
db.集合名.insertMany(变量名)
2、更新文档
MongoDB通过update函数或者save函数来更新集合中的文档
1)update函数
update()函数用于更新已存在的文档
语法:db.集合.update({查询条件},{更新内容},{更新参数(可选)})
示例:将title为SpringCloud的改为 Spring-Cloud
db.test.update({title:"springcloud"},{title:"Spring_Cloud"})
2) 更新操作符
①、$set更新操作符
$set:用来指定一个键并更新键值,若键不存在则创建
语法:db.collection.update({查询条件},{$set:{更新内容}})
示例:将title为Spring-Cloud的改为 SpringCloud
db.test.update( {title:"Spring_Cloud"}, {$set:{title: "SpringCloud"}} )
示例:将title为SpringCloud的文档添加一个属性num=1
示例:将所有title为SpringCloud的文档添加属性 size:1000
②、$inc操作符
$inc:可以对文档中某个值为数字型的键进行增减的操作
示例:将title为SpringCloud的文档的num+1
③、$unset操作符
$unset:主要用来删除键
示例:删除title为SpringCloud中的num键
④、$push操作符
$push:向文档中的某个数组类型的键添加一个数组元素,不过滤重复的数据。添加时键存在,则要求其值类型必须是数组;键不存在,则创建数组类型的键
示例:向title为SpringCloud的文档中添加 键为tags,值为['SpringCloud Stream']
⑤、$pop操作符
$pop操作符:删除数据元素,1表示从数组的尾部删除,-1表示从数组的头部删除
⑥、pull操作符
$pull:从数组中删除满足条件的元素
示例:删除title为SpringCloud文档中 tags中的 SpringCloud Stream
⑦、$pullAll操作符
$pullAll:从数组中删除满足条件的多个元素
示例: 删除title为java中的 ,tags中的JavaSE和JavaEE
⑧、$rename操作符
$rename:对键进行重新命名
示例:将title为java的文档中的tags改为tag
3)使用Save来更新文档
save方法通过传入的文档来替换已有的文档
语法:save({文档})
示例:将上述最后一个文档更新为 tile:SpringData
3、删除文档
1)remove()函数
使用remove函数可以删除集合中指定的文档
语法:remove({指定删除条件},删除参数(可选参数))
【注意】
如果使用的条件在集合中可以匹配到多条数据,那么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()函数可以使用格式化的方式来显示所有文档
2)findOne()函数
findOne()函数只返回满足条件的第一条数据。如果未做投影,则该方法自带格式化功能
语法:findOne({查询条件(可选)},{指定投影的键(可选)})
3)MongoDB中的模糊查询
在MongoDB中可以通过 // ^ $ 实现模糊查询,注意使用模糊查询时查询条件不能放到双引号或者单引号中
实例:
查询文档中title值含有a的内容
查询文档中title以S开头的文档
^表示起始位置
查询文档中title以g结尾的内容
4)投影操作
①、find函数投影操作
在find函数中,我们可以指定投影键
语法:find({查询条件},{投影键名:0|1,投影键名:0|1,投影键名:0|1.....})
过滤掉_id
5)条件操作符
条件操作符用于比较两个表达式并从mongoDB集合中获取数据
语法:find({键:{操作符:条件}})
①、$gt 大于操作符
我们可以使用$gt操作做大于的条件判断。该操作符可以对数字或者日期进行判断
插入数据
查询size大于300的文档
②、$lt 小于操作符
查询size小于300的文档
③、$gte 大于等于操作符
查询size大于等于300的文档
④、$lte 小于等于操作符
查询size小于等于300的文档
⑤、$eq 等于操作符
查询size等于300的文档
⑥、$ne 不等于操作符
查询size不等于300的文档
⑦、$and 操作符
我们可以使用$and操作符来表示多条件间的并且关系
语法:find({$and:[{条件1},{条件2},{条件3}}]})
如果在查询中给定了多个查询条件,条件之间默认的关系为and关系
查询size 大于100并且小于300的文档
使用$and语法
⑧、$or 我们可以使用该操作符来表示多条件间的或者关系
语法:find( { $or:[{条件1},{条件2},....] } )
⑨、$and和$or联合使用
查询title为test5 并且size等于500, 或者size小于200的文档
⑩ $type 是基于Bson类型来检索集合中匹配的数据类型
查找title值为number的文档
6)分页操作 Limit和skip函数
①、Limit函数
如果需要在MongoDB中读取指定数据的数据记录,可以使用MongoDB的Limit函数,limit函数接受一个数字参数,该参数指定从mongo中读取记录的个数
语法:db.collection.find().limit(num1)
②、skip函数来跳过指定数量的数据
语法:db.collection.find().limit(num1).skip(num2)
我们可以使用skip函数和limit函数实现mongoDB分页查询,但是官方并不推荐这样做,因为这样会扫描全部文档,然后再返回结果,效率过低
7)Mongo排序
size降序排列