MongoDB常见语句

时间:2025-04-16 09:35:04

目录

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值相加显示