MongoDB常见语句
目录
1. 增删改
2. 评估查询运算符
3. 比较查询运算符
4. 逻辑运算符
5. 元素运算符
6. 数组查询运算符
7. 字段更新操作符
8. 数组更新操作符
10. 聚合管道
1. 增删改
增
db.getCollection("Y").insert({"age": 10,name: "ces5"});//增 db.getCollection("Y").insertMany([{"age": 10,name: "ces5"},{"age":11,name:"ces6"}]); //批量新增
删
db.getCollection("Y").remove({"age":8});//删,deleteOne效果一样 db.getCollection("Y").deleteMany({"age":10});//批量删除
改
db.getCollection("Y").update({"age": 10},{set:{name:"测试2"}});//批量改
2. 评估查询运算符
`$mod取模
db.getCollection("Y").find({"age":{$`mod:[8,1]}}); //取除8余1的数据
`$regex正则用法
db.getCollection("Y").find({des:{options:"i"}})
db.getCollection("Y").find({des:{options:'si'}})
db.getCollection("Y").find({des:{options:'x'}})
1.^s表示以s开头,s$表示以s结束
2.$options:"i"表示不区分大小写,$options:"m"表示换行符,$options:'x'表示忽略空白字符
3.m.*line表示匹配value中包含m且之后为任意字符且包含line字符的字符串。“si”表示包含换行符且不区分大小写
3. 比较查询运算符
gte:大于等于
db.getCollection("Y").find({"age":{gte:8}}); //查询age大于等于8的数据
lte:小于等于
db.getCollection("Y").find({"age":{lte:8}}); //查询age小于等于8的数据
ne:不等于
db.getCollection("Y").find({"age":{ne:8}}); //查询age不等于8的数据
nin:不包含
db.getCollection("Y").find({"age":{nin:[7,8]}});//查询age不包含7,8的数据
注意这里是数组形式
4. 逻辑运算符
`$and
db.getCollection("Y").find({exists:true}}]});//查询age=10且des字段存在的数据
`$or
db.getCollection("Y").find({in:[7,9]}},{"des":{$`exists:true}}]});//查询age=7,9或者des字段存在的数据
`$not
db.getCollection("Y").find({"age":{gt:10}}});//组合使用,查询age不大于10的数据 db.getCollection("Y").find({"des":{$`not:/^M.*/}});//单独配合正则使用,查询des值不是以M开头的value数据
`$nor
db.getCollection("Y").find({gt:10}}]});//查询name!=ces1和age小于等于10的数据
执行逻辑NOR运算,指定一个至少包含两个表达式的数组,选择出都不满足该数组中所有表达式的文档
5. 元素运算符
`$type
db.getCollection("Y").find({age:{$`type:2}});//查询age类型为string类型的数据,具体对应值看链接
`$exists
db.getCollection("Y").find({"des":{$`exists:true}});//查询des的value值存在的数据
6. 数组查询运算符
`$all
db.ces.find({age:{$`all:[10,11]}});//查询age为10且11的数据,并集必须都满足
`$elemMatch
db.ces.find({"name": {"$`elemMatch":{"name1":"小红","relationship": 0}}})//查询层级下数据组合,等价于
db.ces.find({"name.name1":"小红",:"name.relationship":0})
`$size:匹配数组元素个数
db.ces.find({"age":{$`size:2}});//匹配符合size大小的数组数据
7. 字段更新操作符
`$mul
db.getCollection("ces").updateMany({hi:10},{$`mul:{age:2}})//批量修改将hi为10的数据age全部乘以2
`$max:仅当更新值大于现有字段值时才更新该字段
db.getCollection("ces").update({"age":22},{$`max:{"hi":11}});//更新条件为将需更新的值更新为大于当前值的值,小于当前值则不更新。日期格式也是如此
$min:仅当更新值小于现有字段值时才更新该字段
`$set
db.getCollection("ces").update({"age":22},{min和$`max好用,不做任何限制
`$inc
db.getCollection("ces").update({"age":22},{$`inc:{"hi":12}});//给指定的hi增加12,可批量操作
`$rename
db.getCollection("ces").update({"hi":100},{$`rename:{name:"name1"}});//重命名字段名,不修改里面的值
`$unset
db.getCollection("ces").updateMany({"hi":100},{$`unset:{name2:"ces"}});//删除name2=ces的字段,是删除不是置null
8. 数组更新操作符
`$addToSet
db.getCollection("ces").update({age:188},{addToSet:{ces:["a2"]}这种写法会录入成"ces":[["a2"]]这种两层数组形式
`$each
db.getCollection("ces").update({age:188},{each:["a2","b1"]}}});//配合$`addToSet使用,可以一次性增加多个值,已存在的值不再重复增加
`$push
db.getCollection("ces").update({age:188},{addToSet类似
`$sort
db.getCollection("ces").update({age:2},{each:[{a:5},{a:6}],push:{ces:{sort:1}}});
db.getCollection("ces").update({age:2},{each:[],$`sort:-1}}});只使用sort进行排序更新
查询使用:db.ces.find({}).sort({"age":-1}),-1倒序,1正序
`$pull
db.getCollection("ces").update({age:2},{$`pull:{ces:3}});//将ces中value=3删除
`$pullAll
db.getCollection("ces").update({age:2},{$`pullAll:{ces:[{a:5},2]}});//批量删除
10. 聚合管道
limit+skip
db.ces.find({}).limit(2).skip(1);//等价mysql:LIMIT 1,2(从角标1开始查询2条数据)
`$unwind
db.ces.aggregate([{age"}]);//将age中数组和文档类型的value值拆分显示,其余的不动
`$sample
db.ces.aggregate({$`sample:{size:4}});//随机返回四个数据
`$match
db.ces.aggregate([{gte":10,"$`lte":20}}}]);//match相当于where,后面加查询语句
`$project
db.ces.aggregate({age"}});//从文档中根据条件查询显示,0表示不展示,1表示展示,将age重命名为reage展示\ ==四则远算:加法subtract、乘法divide、求模project:{_id:0,name:1,hi:{hi",2]}});//将hi的值*2显示
db.ces.aggregate({add:["age"]}});//将hi和age值相加显示