mongodb——超好用的$

如果各位看过我之前的mongo博客,大家就会发现$是非常强大的。本篇博客中我们就专门来介绍一些常用的$操作符。

查询类

关键字 解释 语法 例子
$eq 值相等 {field:{$eq:value}} db.test.find({name:{$eq:“tom”}})
$gt 大于 {field:{$gt:value}} db.test.find({age:{$gt:13}})
$gte 大于等于 {field:{$gte:value}} db.test.find({age:{$gte:13}})
$lt 小于 {field:{$lt:value}} db.test.find({age:{$lt:14}})
$lte 小于等于 {field:{$lte:value}} db.test.find({age:{$lte:14}})
$ne 不等于 field:{$ne:value}} db.test.find({age:{$ne:10}})
$in 目标值在指定数组里面 {field:{$in:[value1,…,valueN]}} db.test.find({age:{$in:[12,20]}})
$nin 目标值不在指定数组里面 {field:{$nin:[value1,…,valueN]}} db.test.find({age:{$nin:[12,20]}})

逻辑操作类

关键字 解释 语法 例子
$or 逻辑或 {$or:[{expression1},…,{expressionN}]} db.test.find({$or:[{name:“tom”},{name:“jim”}]})
$and 逻辑与 {$and:[{expression1},…,{expressionN}]} db.test.find({$and:[{name:“tom”},{age:13}]})
$not 与表达式不匹配的值(逻辑非) {field:{$not:{expression}}} db.test.find({name:{$not:{$eq:“tom”}}})
$nor 与任意表达式(多个)都不匹配的值 {$nor:[{expression1},…,{expressionN}]} db.test.find({$nor:[{name:“tom”},{age:13}]})

属性操作类

关键字 解释 语法 例子
$exists 查询文档中是否存在指定属性的文档 {field:{$exists:boolean} db.test.find({y:{$exists:true}})
$type 查询指定属性为某一类型的文档 {field:{$type:typeNumber}}或者{field:{$type:alias}} db.test.find({“x”:{KaTeX parse error: Expected 'EOF', got '}' at position 7: type:1}̲})或者db.test.fin…type:“number”}})

数组操作类

关键字 解释 语法 例子
$all 查询出文档的数组属性包含指定数组的文档 {field:{$all:[value1,…,valueN]}} db.test.find({“favorite.fruit”:{$all:[“apple”]}})
$elemMatch 查询出目标数组有一个元素满足所有查询条件的文档 {field:{$elemMatch:{query1,…,queryN}}} db.test.find({“favorite.fruit”:{KaTeX parse error: Expected '}', got 'EOF' at end of input: elemMatch:{ne:“pear”,$ne:“apple”}}})
$size 匹配数组长度为指定大小的文档 {field:{$size:number}} db.test.find({“favorite.fruit”:{$size:2}})

投影类(影响返回结果的属性)

关键字 解释 语法 例子
field.$ 在查询简单数组时,返回数组中匹配到的第一个元素 {“field.$”:不为0或者false} db.test.find({“favorite.fruit”:{$eq:“apple”}},{“favorite.fruit.$”:1})
$elemMatch 在查询复杂数组时(数组里面是bson对象),返回数组里面匹配到的第一个bson {field:{$elemMatch:{针对数组bson结构的查询条件}}} db.test.find({class:“1”},{students:{$elemMatch:{age:12}}})
$slice 切片(分页) {field:{$slice:number}} number为正数则返回前n个,number为负数则返回后n个;{field:{$slice:[skipNum,limitNum]}} 表示跳过skipNum的数量,返回limitNum的元素 db.test.find({class:“1”},{students:{$slice:2}})

修改属性值类

关键字 解释 语法 例子
$inc 对目标属性做加减法 {$inc:{field1:num1,…,fieldN:numN}} db.test.update({z:1},{$inc:{x:1,y:1}})
$mul 对目标属性做乘法 {$mul:{field1:num1,…,fieldN:numN}} db.test.update({z:1},{$mul:{x:2,y:2}})
$mod 取余 {field:{$mod:[除数,余数]}} db.test.find({x:{$mod:[2,1]}})
$rename 将目标属性修改属性名 {$rename:{field1:newName1,…,fieldN:newNameN}} db.test.update({z:1},{$rename:{x:“a”,y:“b”}})
$set 更改某一个属性的值,而不是全部替换 {$set:{field1:num1,…,fieldN:numN}} db.test.update({z:1},{$set:{a:1,b:1}})
$unset 删除文档中的某一个字段,若不存在则不操作 {$unset:{field1:anyValue,…,fieldN:anyValue}} db.test.update({z:1},{$unset:{“c”:“2”}})
$min 将文档中的值与输入的值比较,更新成较小的值 {$min:{field1:value1,…,fieldN:valueN}} db.test.update({z:1},{$min:{a:0,b:2}})
$max 将文档中的值与输入的值比较,更新成较大的值 {$max:{field1:value1,…,fieldN:valueN}} db.test.update({z:1},{$max:{a:0,b:2}})
$currentDate 将某一个属性设置成当前时间 {KaTeX parse error: Expected '}', got 'EOF' at end of input: …tDate:{field1:{type1:typeValue1},…,fieldN:{$typeN:typeValueN}}} db.test.update({z:1},{$currentDate:{b:{$type:“timedtamp”}}})
$addToSet 添加一个元素到数组中(若数组中已存在则不添加) {$addToSet:{field1:value1,…,fieldN:valueN}} db.test.update({“z”:1},{$addToSet:{c:4}})
$pop 删除数组中的第一个或者最后一个值,-1表示第一个,1表示最后一个 {$pop:{field:-1或者1}} db.test.update({z:1},{$pop:{c:-1}})
$pullAll 删除数组中所有跟指定值相同的元素 {$pullAll:{field:[value1,…,valueN]}} db.test.update({z:1},{$pullAll:{c:[1,2]}})
$pull 删除满足条件的所有元素 {$pull:{field:value}} db.test.update({z:1},{$pull:{c:{$eq:3},c:3}})
$push 向数组中添加元素(可以重复添加) {$push:{field:value}} db.test.update({z:1},{$push:{c:1}})
$each 搭配pushpush和addToSet使用,如果要批量添加值,则可以通过添加数组的方式。$each会把要添加的数组一个一个拿出来添加到原数组中,不会把整个数组添加到原数组中 {KaTeX parse error: Expected '}', got 'EOF' at end of input: push:{field:{each:[value1,value2]}}} db.test.update({z:1},{KaTeX parse error: Expected '}', got 'EOF' at end of input: push:{c:{each:[1,2,3]}}})

复杂类

关键字 解释 语法 例子
$regex 使用正则表达式查询 很复杂 建议参考官网 很复杂 建议参考官网
$text 文本索引查询 很复杂 建议参考官网 很复杂 建议参考官网
$where 把js表达式转换成查询 很复杂 建议参考官网 很复杂 建议参考官网
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章