MongoDB之运算符
1. 比较运算符
1. 等于
db.student.find({age: {$eq: 20}});
2. 大于
db.student.find({age: {$gt: 20}});
3. 小于
db.student.find({age: {$lt: 20}});
4. 不等于
db.student.find({"age": {$ne:25}});
5. 包含
db.student.find({"name": {$in:["liudehua","liming"]}});
6. 不包含
db.student.find({"name": {$nin:["liudehua","liming"]}});
7. 大于等于
db.student.find({age: {$gte: 20}});
8. 小于等于
db.student.find({age: {$lte: 20}});
2. 逻辑运算符
1. 与
db.student.find({"name":"zhangxueyou","age" : 26});
name为zhangxueyou,并且age是26
2. 或
db.student.find({$or: [{name:"liudehua"},{age:25}]});
3. 非
db.student.find({"name": {$not:{$in:["liudehua","liming"]}}});
4. 是否存在
db.student.find({"name": {$exists:true}}); 查询age字段存在的文档
5. 类型查询
db.student.find({"name": {$type:2}}); 查询name字段为string类型的文档

3. 评估运算符
1. 取模
db.student.find({"age":{$mod:[5,0]}}); 取出age除以5等于0的文档
2. 正则查询
db.student.find({"name":/^zhan/});
4. update运算符
1. $set 用于指定修改的字段和值
db.student.update({"name":"yangjianbo"},{$set:{"love":[20,38,30,58,89]}}); 将name为yangjianbo的文档的love的值,修改为[20,38,30,58,89]
2. $unset 取消文档某个字段
db.student.update({"name":"zhangxueyou","age":26},{$unset:{"company":"milanyi"}}); 将name为zhangxueyou并且age为26的文档的company字段,取消
3. $inc 用于增加或减少数值
db.student.update({"name":"akun"},{$inc:{age:60}}); 将name为akun的age增加60,看清楚是增加60,不是增加到60
db.student.update({"name":"akun"},{$inc:{age:-80}}); 将name为akun的age减少80,减少80,不是减少到80
4. $rename 修改字段名称
db.student.update({"name":"zhangxueyou"},{$rename:{"age":"nianling"}});
5. $mul 用于乘法运算
db.student.update({"name":"akun"},{$mul:{"age":5}});
6. $setOnInsert 如果文档不存在,就插入数据;存在就没有任何操作
db.student.update({"name":"akun2"},{$setOnInsert:{"age1":5}},{upsert:true});
7. $min 如果min的值比当前值小,就替换当前值;否则,不操作
db.student.update({"name":"akun"},{$min:{"age":35}});
8. $max 如果max的值比当前值大,就替换当前值;否则,不操作
db.student.update({"name":"akun"},{$max:{"age":50}});
9. $currentDate 插入当前时间
db.student.update({"name":"akun"},{$currentDate:{"mydate":{$type:"date"}}});
db.student.update({"name":"akun"},{$currentDate:{"mydate":{$type:"timestamp"}}});
5. 数组操作运算符
db.student.insert({"name":"yangjianbo","love":[30,50,85,100,135]});
1. 数组单元素查询
db.student.find({"love":30}); love数组中包含30的文档
2. 数组多元素查询
db.student.find({"love":{$all:[30,50]}}); love数组中同时包含30和50的文档(会查出至少包含30,50的文档)
3. 数组长度
db.student.find({"love":{$size:5}}); love数组是5个元素的文档
4. 元素查询
db.student.find({"love":{$elemMatch:{$gt:40,$lt:90}}}); love数组中的元素大于40小于90的文档
5. $pop 删除数组中的最后一个元素或者第一个元素
db.student.update({"name":"houzhen"},{$pop:{"love":1}}); 最后一个元素
db.student.update({"name":"houzhen"},{$pop:{"love":-1}}); 第一个元素
6. $pull 删除数组中满足条件的元素
db.student.update({"name":"houzhen"},{$pull:{"love":"wss"}});
7. $push 在数组中添加一个元素,只能添加一个元素,即使插入多个元素,也只插入最后一个元素
db.student.update({"name":"houzhen"},{$push:{"love":"wss"}});
8. $pullAll 删除数组中的多个元素
db.student.update({"name" : "houzhen"},{$pullAll:{"love":["jd","dst"]}});
9. $pushAll 从2.4版本,已经不再使用
使用$push和$each结合
db.student.update({"name" : "houzhen"},{$push:{"love":{$each:["jd","dst"]}}});
10. $addToSet 添加一个元素到数组中,但是不能添加已存在的元素,只能添加数组中没有的元素
db.student.update({"name" : "houzhen"},{$addToSet:{"love":"m"}});
11. $each 与push结合使用,用于插入多个元素到数组中
db.student.update({"name" : "houzhen"},{$push:{"love":{$each:["jd","dst"]}}});
12. $slice 只返回数组的部分数据
db.student.find({},{"love":{$slice:2}}); 只返回love数组的前两个元素
db.student.find({},{"love":{$slice:-2}}); 只返回love数组的后两个元素
13. $sort 用于插入数组时的元素的排序,必须跟$each结合使用
db.student.update({"name" : "yangjianbo"},{$push: {"love":{$each:[102,300],$sort:1}}}); 插入两个元素,并升序结果
db.student.update({"name" : "yangjianbo"},{$push: {"love":{$each:[102,300],$sort:-1}}}); 插入两个元素,并降序结果
14. $position 指定元素插入数组的位置,从0开始
db.student.update({"name" : "yangjianbo"},{$push: {"love":{$each:[128,66],$position:1}}});
15. $bit
16. $ 确定数组中一个要被更新的元素的位置
创建一个文档
db.students.insert([
{ "_id" : 1, "grades" : [ 85, 80, 80 ] },
{ "_id" : 2, "grades" : [ 88, 90, 92 ] },
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }
])
更新数组中的文档
db.students.updateOne(
{ _id: 1, grades: 80 },
{ $set: { "grades.$" : 82 } }
)
6. 高级查询$where
db.student.find({$where:"this.age>20"}); 查看age大于20的所有文档
db.student.find({$where:"this.name == 'yangjianbo' "}); 查看name是yangjianbo的文档
db.student.find({$where:"this.name != 'yangjianbo' "}); 查看name不是yangjianbo的所有文档

浙公网安备 33010602011771号