等于: $eq 例如: {'age':{'$eq':20}}
不等于: $ne 例如: {'age':{'$ne':20}}
大于: $gt 例如: {'age':{'$gt':20}}
大于等于: $gte 例如: {'age':{'$gte':20}}
在。。里: $in 例如: {'age':{'$in':[20,30]}}
不在。。里: $nin 例如: {'age':{'$nin':[20,30]}}
小于: $lt 例如: {'age':{'$lt':20}}
小于等于: $lte 例如: {'age':{'$lte':20}}
并且: $and 例如:{ ‘$and’: [ { ‘price’: { ‘$ne’: 1.99 } }, { ‘price’: { ‘$exists’: true } } ]
或者: $or 例如: { '$or': [ { 'quantity': { '$lt': 20 } }, { 'price': 10 } ] }
取反:$not 例如:{ 'price': {'$not': { '$gt': 1.99 } } }
多条件取反(既不也不,用法类似and):$nor 例如:{ '$nor': [ { 'price': 1.99 }, { 'sale': true } ] }
属性是否存在: $exists 例如:{ ‘qty’: { ‘$exists’: true, ‘$nin’: [ 5, 15 ] } }
类型判断:$type 例如: { field: { $type:
} } 使用nummer和Aloas都可以
(version>3.6)条件语句:$expr 例如: { $expr: { $gt: [ "$spent" , "$budget" ] } } 查询spent大于budget的
let discountedPrice = { $cond: { if: { $gte: ["$qty", 100] }, then: { $multiply: ["$price", NumberDecimal("0.50")] }, else: { $multiply: ["$price", NumberDecimal("0.75")] } } }; // Query the supplies collection using the aggregation expression db.supplies.find( { $expr: { $lt:[ discountedPrice, NumberDecimal("5") ] } });
(version>3.6)json格式查询条件:$jsonSchema 例如: {$jsonSchema:myjsonschema}
定义查询块: let myjsonschema = { required: [ "item", "qty", "instock" ], properties: { item: { bsonType: "string" }, qty: { bsonType: "int" }, size: { bsonType: "object", required: [ "uom" ], properties: { uom: { bsonType: "string" }, h: { bsonType: "double" }, w: { bsonType: "double" } } }, instock: { bsonType: "bool" } } }
除法判断:$mod 例如: { 'qty': { '$mod': [ 4, 0 ] } } 查询qty除以4余0的
正则表达式:$regex 例如:{ name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } } 或者
{ name: { $regex: /acme.*corp/, $options: 'i', $nin: [ 'acmeblahcorp' ] } }
options参数: 'i':不区分大小写;'m':每行的开头和结尾都要匹配;'x':忽略空白字符;’s‘:允许点匹配所有
文本搜索(必须创建文本索引才可以使用):$text 例如 :
{ $text: { $search:
, $language: , $caseSensitive: , $diacriticSensitive: } } 执行javascript函数: $where 例如:
{ $where: function() { return (hex_md5(this.name) == "9b53e667f30cd329dca1ec9e6a83e994") } }
包含给出的所有对象 : $all 例如:{ tags: { $all: [ [ "ssl", "security" ] ] } } ,查询tags字段包含’ssl‘,’security‘的集合
至少有一个满足条件的元素存在:$elemMatch 例如:{ results: { $elemMatch: { $gte: 80, $lt: 85 } } ,查询results属性至少包含一个大于等于80小于85的元素
数组元素个数过滤:$size 例如: { field: { $size: 1 } }
array.$ 标识匹配条件的第一个:
例如:
db.students.find( { semester: 1, grades: { $gte: 85 } }, { "grades.$": 1 } )
$meta 元数据
{ $meta:
} metaDataKeyword取值:textScore,searchScore,searchHighlights $slice 切片 例如:
db.posts.find( {}, { comments: { $slice: -5 } } ) 查询最后5条数据
db.posts.find( {}, { comments: { $slice: [ 20, 10 ] } } ) 从第20条数据开始,查询10条数据
db.posts.find( {}, { comments: { $slice: [ -20, 10 ] } } ) 从尾部数第20开始,查询10条数据
$currentDate: 修改字段为当前时间
db.customers.updateOne( { _id: 1 }, { $currentDate: { lastModified: true, # 将lastModified改为当前时间 "cancellation.date": { $type: "timestamp" } #cancellation.date改为当前时间戳 }, $set: { "cancellation.reason": "user request", status: "D" } } )
$inc 自增 例如:
b.products.update( { sku: "abc123" }, { $inc: { quantity: -2, "metrics.orders": 1 } } )
$min 将高于目标值的全部转为目标值 例如:
db.scores.updateMany( { _id: 1 }, { $min: { lowScore: 150 } } )
$max 将低于目标值的全部转为目标值 例如:
db.scores.updateMany( { _id: 1 }, { $max: { lowScore: 150 } } )
$mul 属性相乘 例如:
db.products.update( { _id: 1 }, { $mul: { price: NumberDecimal("1.25"), qty: 2 } } )
$rename 属性重命名 例如:
db.students.update( { _id: 1 }, { $rename: { 'nickname': 'alias', 'cell': 'mobile' }
$set 修改属性值
$setOnInsert 插入时添加属性:如果新插入了一条数据,则添加setOnInsert的值,否则仅执行set
db.products.update( { _id: 1 }, { $set: { item: "apple" }, $setOnInsert: { defaultQty: 100 } }, { upsert: true } )
$unset 删除属性 例如:
db.products.update( { sku: "unknown" }, { $unset: { quantity: "", instock: "" } } )
$ 表示第一个匹配对象
$[] 表示所有匹配对象
$[element] 与arraryFilters配合使用 例如:
db.collection.update( { myArray: [ 0, 1 ] }, { $set: { "myArray.$[element]": 2 } }, { arrayFilters: [ { element: 0 } ], upsert: true } ) # 将数组中的0全部改为2
db.students2.update( { }, { $set: { "grades.$[elem].mean" : 100 } }, { multi: true, arrayFilters: [ { "elem.grade": { $gte: 85 } } ] } ) # 将数组中对象grade大于等于85的对象的mean值改为100
$addToSet 不存在则添加
例如:
db.test.update( { _id: 1 }, { $addToSet: { letters: [ "c", "d" ] } } )
$pop 移除第一个(-1)或最后一个元素(-1)例如:
{ $pop: {
: <-1 | 1>, ... } } $pull 移除所有匹配的元素
例如:移除水果列表中的’apples,和oranges ,移除vegetables中carrots
db.stores.update( { }, { $pull: { fruits: { $in: [ "apples", "oranges" ] }, vegetables: "carrots" } }, { multi: true } )
$push 添加元素,单个或多个
例如:
db.students.update( { _id: 5 }, { $push: { quizzes: { $each: [ { wk: 5, score: 8 }, { wk: 6, score: 7 }, { wk: 7, score: 6 } ], $sort: { score: -1 }, # 按照score倒序排列 $slice: 3 # 截取三个元素 } } } )
$pullAll 移除所有给出的元素
例如: 移除scores中的0和5
db.survey.update( { _id: 1 }, { $pullAll: { scores: [ 0, 5 ] } } )
$each 与 push和addToSet搭配使用,操作多个元素
$position 指定push是的添加元素位置
$slice 与push each联合使用
$sort 与push each联合使用
limit: 截取 limit(20)
skip :分页时跳过skip(20)
sort : {‘age':1} 升序 ,{age:-1}降序