MongoDB 操作符详解

xiaoxiao2025-09-13  78

比较操作符

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

转载请注明原文地址: https://www.6miu.com/read-5036279.html

最新回复(0)