比较操作符
## 等于 : {key : value}
## 小于 : {key : {$lt : value}}
## 小于或等于 : {key : {$lte : value}}
## 大于 : {key : {$gt : value}}
## 大于或等于 : {key : {$gte : value}}
## 不等于 : {key : {$ne : value}}
## 存在 : {key : {$in: [<value1>, <value2>, ... <valueN> ]}}
## 不存在 : {key : {$nin: [ <value1>, <value2> ... <valueN> ]} }
逻辑操作符
## AND : {key1: value1, key2 : value2}
## OR : {key : value, $or: [{key1 : value1},{key2 : value2}]}
## NOT : {key : {$not: { <operator-expression> } } }
## NOR : {$nor: [{<expression1>}, {<expression2>}, ... {<expressionN>}]}
元素操作符
## exists : {key : {$exists: <boolean> } }
## type : {key : {$type: <BSON type number> | <String alias> } } 例:db.addressBook.find( { "key" : { $type : "string" } } );
评估操作符
## mod : {key : {$mod: [divisor(除数), remainder(余数)]}} 例:db.inventory.find( { qty: { $mod: [ 4, 0 ] } } )
## regex : {key : {$regex: /pattern/, $options: '<options>' } }
## text : {$text:{$search: <string>, $language: <string>, $caseSensitive: <boolean>, $diacriticSensitive: <boolean>}}
## $where
## $all : {key : {$all: [ <value1> , <value2> ... ] } } // 字段值必须全部包括才满足
## elemMatch : {key : {$elemMatch: {<query1>, <query2>, ...}}} // 字段值有一个满足就满足
## size : db.collection.find({key: {$size: num}}); // 字段的元素个数等于指定的值(num)
投影操作符
## $ : db.students.find({key1: 1, key2: {$gte: 85}}, { "grades.$": 1 }) // 返回查询结果的第1个字段
## $elemMatch : db.schools.find({key1: "63109"}, {key2: {$elemMatch: {key2-1: "102"}}}) // 根据第一个查询条件查询出结果,然后根据第二个条件进行筛选满足结果的第一条数据;
例:{ "_id" : 1, "key2" : [ { "name" : "john", "key2-1" : 102, "age" : 10 } ] }
{ "_id" : 3 }
{ "_id" : 4, "key2" : [ { "name" : "barney", "key2-1" : 102, "age" : 7 } ] }
## slice : db.collection.find({key: value}, {array: {$slice: count}}); // 控制array数组返回结果的个数
字段类操作符:
$inc:对指定字段进行加操作; update({ field: value }, { $inc: { field1: amount } } ) // amount:可以为负数
$rename:修改字段名称; {$rename: { <old name1>: <newname1>, <old name2>: <new name2>, ... } }
$setOnInsert:在upsert为true时,且添加的文档不存在的情况下才会执行;db.collection.update(<query>, { $setOnInsert:{ <field1>: <value1>, ... } }, {upsert: true })
$set:存在就修改,不存在就添加; update({ field: value1 }, { $set: { field1: value2 } } )
$unset:根据条件,删除field1字段; update({ field: value1 }, { $unset: { field1: <arg> } } ) // arg为Boolean值,可以为空("")
数组类操作符:
$addToSet:与push功能差不多,不同的是,如果数组中已存在该数值将不做任何操作; db.collection.update( { field: value }, {$addToSet: { field: value1 } } );
$pop:删除指定数组的第一或最后一个元素,arg=1删除最后一个,arg=-1删除第一个; db.collection.update( {field: value }, { $pop:{ field:,<arg> } } )
$pullAll:删除数组中的多个元素; db.collection.update( { field: value }, {$pushAll: { field1: [ value1, value2, value3 ] } } );
$pull:删除数组(field)中的一个元素(query),如果字段不是数组error; db.collection.update( { field: <query> },{ $pull: { field: <query> } } );
$pushAll:将多个数值存入数组; db.collection.update({ field: value }, { $pushAll: { field1: [ value1, value2, value3 ] } } );
$push:讲一个数字存入数组,存在即添加,不存在创建后添加,如果不是数组error,一次只能存一个value; db.collection.update(<query>, { $push:{ <field>: <value> }}) //
$each:将多个数值一次存入;
结合$addToSet:db.collection.update( <query>, { $addToSet: { <field>: { $each: [ <value1>, <value2>... ]}}}) // 去除重复的然后在一次添加
结合$push:db.collection.update( <query>, { $push:{ <field>: { $each: [ <value1>, <value2> ... ] } }}) // 一次添加
$slice:截取数组并更新,结合$push使用,num为0时空数组赋值,正数取前开始取num位,负数从后面开始取num位;db.collection.update(<query>, { $push: {<field>: {$each: [ <value1>, <value2>, ... ], $slice: <num>}}})
$sort:排序命令,根$push和$each一起使用,且数组中都是对象,sort根据指定对象的字段进行排序,1正序,-1倒序; db.collection.update(<query>, { $push:{<field>: {$each: [ <document1>, <document2>, ...], $slice: <num>, $sort: <sort document>,}}})
例:db.c5.update({_id:1},{$push:{ary:{$each:[{_id:1,score:3},{_id:2,score:5},{_id:3,score:1}],$slice:-5,$sort:{score:-1}}}})
一下文档可以参考一下
参考1:https://blog.csdn.net/mengxiangyue/article/details/18560357?utm_source=blogxgwz0
参考2:https://blog.csdn.net/sinat_29091823/article/details/75050950