MongoDB 操作符详解

比较操作符

## 等于			: {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

猜你喜欢

转载自blog.csdn.net/u014259503/article/details/83383866