Mongodb操作符表达式大全及实例
Posted 前端早鸟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongodb操作符表达式大全及实例相关的知识,希望对你有一定的参考价值。
注意!!!微信排版错乱,如果需要清楚的表格请点击本文底部阅读原文,进入我的博客查看
Mongodb操作符
1查询与投影
1.1 比较操作符
名称 | 语法 | 描述 | 举例 |
$eq |
{ <field>: { $eq: <value> } } |
匹配等于值的文档 | db.person.find( { age: { $eq: 20 } } ) |
$gt |
{<field>: {$gt: <value>} } |
匹配大于(>)指定值的文档 | db.person.find( { age: { $gt: 20 } } ) |
$gte |
{field: {$gte: value} } |
匹配大于等于(>=)指定值的文档 | db.person.find( { age: { $gte: 20 } } ) |
$lt |
{field: {$lt: value} } |
匹配小于(<)指定值的文档 | db.person.find( { age: { $lt: 20 } } ) |
$lte |
{ field: { $lte: value} } |
匹配小于等于(<=)指定值的文档 | db.person.find( { age: { $lte: 20 } } ) |
$ne |
{field: {$ne: value} } |
匹配不等于(≠)指定值的文档 | db.person.find( { age: { $ne: 20 } } ) |
$in |
{ field: { $in: [<value1>, <value2>, ... <valueN> ] } } |
匹配数组中的任一值 | db.person.find( { age: { $in: [20,21,23] } } ) |
$nin |
{ field: { $nin: [ <value1>, <value2> ... <valueN> ]} } |
不匹配数组中的任一值 | db.person.find( { age: { $nin: [20,21,23] } } ) |
1.2 逻辑操作符
名称 | 语法 | 描述 | 举例 |
$or |
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] } |
或 条件查询 | 查询age<20或者address是beijing的文档:db.person.find( { $or: [ { age: { $lt: 20 } }, { address: "beijing" } ] } ) |
$and |
{ $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] } |
与 条件查询 | 查询age<20并且address是beijing的文档: db.person.find( { $and: [ { age: { $lt: 20 } }, { address: "beijing" } ] } ) |
$not |
{ field: { $not: { <operator-expression> } } } |
查询与表达式不匹配的文档 | 查询age不大于20的文档: db.person.find( { age: { $not: { $gt: 20 } } } ) |
$nor |
{ $nor: [ { <expression1> }, { <expression2> }, ... { <expressionN> } ] } |
查询与任一表达式都不匹配的文档 | 查询age既不等于20,sex也不是男的文档: db.person.find( { $nor: [ { age: 20 },{ sex: "男"} ] } ) ) |
1.3 元素操作符
名称 | 语法 | 描述 | 举例 |
$exists |
{ field: { $exists: <boolean> } } |
查询存在指定字段的文档 | 查询存在phone字段的文档:db.person.find( { phone: { $exists: true } } ) |
$type |
{ field: { $type: <BSON type number>或 <String alias> } } |
查询类型为指定类型的文档,3.2版本添加alias别名,各种类型的Number及Alias如下 | 查询该集合中zipCode字段的数据类型为String类型的文档:: db.addressBook.find( { "zipCode" : { $type : 2 } } ); db.addressBook.find( { "zipCode" : { $type : "string" } } ); |
1.3 评估操作符(Evaluation)
名称 | 语法 | 描述 | 举例 |
$mod |
{ field: { $mod: [ 除数, 余数 ] } } |
取余条件查询 | 查询age字段的值除以2余0的文档:db.person.find( { age: { $mod: [ 2, 0 ] } } ) |
$regex |
{ <field>: { $regex: /pattern/, $options: '<options>' } }或{ <field>: { $regex: 'pattern', $options: '<options>' } }或{ <field>: { $regex: /pattern/<options> } } |
正则表达式查询 | db.products.find( { sku: { $regex: /^ABC/i } } ) |
$text |
{ $text: { $search: <string>, $language: <string>, $caseSensitive: <boolean>, $diacriticSensitive: <boolean> } } |
$search ——关键词:- $language ——语言,不支持中文!!$caseSensitive——是否区分大小写,默认false $diacriticSensitive——是否区分读音,默认false 文本索引查询 |
较为复杂,请参考官网 |
$where |
1 |
把一个含有javascript表达式的字符串或者是整个JavaScript函数转换到查询系统中,对内嵌文档不起作用 | db.myCollection.find( { $where: "this.credits == this.debits" } ); db.myCollection.find( { $where: function() { return obj.credits == obj.debits; } } ); ) |
1.4 地理空间查询,Geospatial
名称 | 语法 | 描述 | 举例 |
$geoIntersects |
Selects geometries that intersect with a GeoJSON geometry. The 2dsphere index supports $geoIntersects. | ||
$geoWithin |
Selects geometries within a bounding GeoJSON geometry. The 2dsphere and 2d indexes support $geoWithin. | 用一个封闭的GeoJSON的几何图形在一个几何图形上选择,例如在地图上拉框选择 | |
$near |
Returns geospatial objects in proximity to a point. Requires a geospatial index. The 2dsphere and 2d indexes support $near. | 返回靠近点的地理空间对象。需要地理空间索引。例如附近的人或者商铺 | |
$nearSphere |
Returns geospatial objects in proximity to a point on a sphere. Requires a geospatial index. The 2dsphere and 2d indexes support $nearSphere. | 返回接近于球体上某个点的地理空间对象。需要地理空间索引。 |
1.5 数组操作符,Array
名称 | 语法 | 描述 | 举例 |
$all |
{ < field >: { $ all : [ < value1 > , < value2 > ... ] } } |
匹配文档的数组字段中包含所有指定元素的文档 | 查询articles集合中tags字段(是个数组)包含“ssl”和“security”的文档(包含,但并不是全部等于)db.articles.find( { tags: { $all: [ [ "ssl", "security" ] ] } } ) |
$elemMatch(query) |
{ <field>: { $elemMatch: { <query1>, <query2>, ... } } } |
匹配内嵌文档或数组中的部分field | 查询results数组中含有区间[80,85)元素的文档(结果为第一条): db.scores.find( { results: { $elemMatch: { $gte: 80, $lt: 85 } } }) |
$size |
{ field: { $size: <number> } |
匹配数组长度为指定大小的文档 | 查询已经集齐了5张福卡的文档: db.person.find({card:{$size:5}}) |
1.6 投影操作符,projection
名称 | 语法 | 描述 | 举例 |
$(projection) |
查询数组中首个匹配条件的元素,相当于findOne()方法 | 查询semester=1,并且grades中符合大于等于85的元素的第一个元素:db.students.find( { semester: 1, grades: { $gte: 85 } },{ "grades.$": 1 } ) |
|
$elemMatch(projection) |
用于数组或内嵌文档中的元素匹配(子元素匹配),只会返回匹配的第一个元素 | 查询zipcode为63109并且students数组中school=102的文档:db.schools.find( { zipcode: "63109" },{ students: { $elemMatch: { school: 102 } } } ) |
|
$slice(projection) |
在查询中将数组进行切片(类似于分页) | 查询结果中,对于comments数组的元素只显示前5个:db.posts.find( {}, { comments: { $slice: 5 } } ) |
2.更新操作符
2.1 字段更新
名称 | 语法 | 描述 | 举例 |
$inc |
{ $inc: { <field1>: <amount1>, <field2>: <amount2>, ... } } |
将文档中的某个field对应的value自增/减某个数字amount | 将_id为1的文档的age字段在原来的基础上+1::db.person.update( { _id: 1 }, { $inc: { age: 1} }) |
$mul |
{ $mul: { field: <number> } } |
将文档中的某个field对于的value做乘法操作 | 将_id为1的文档的price值乘以1.25并更新:db.products.update( { _id: 1 }, { $mul: { price: 1.25 } }) |
$rename |
{$rename: { <field1>: <newName1>, <field2>: <newName2>, ... } } |
重命名文档中的指定字段的名 | 将_id为1的文档的nickname字段重命名为alias,cell字段重命名为mobile : db.person.update( { _id: 1 }, { $rename: { 'nickname': 'alias', 'cell': 'mobile' } } ) |
$setOnInsert |
db.collection.update( <query>, { $setOnInsert: { <field1>: <value1>, ... } }, { upsert: true }) |
配合upsert操作,在作为insert时可以为新文档扩展更多的field | 将_id为1的文档的item字段更改为apple,并插入新字段defaultQty,值为100 db.products.update( { _id: 1 }, { $set: { item: "apple" }, $setOnInsert: { defaultQty: 100 } }, { upsert: true }) ) |
$set |
{ $set: { <field1>: <value1>, ... } } |
更新文档中的某一个字段,而不是全部替换 | 更改sex字段,可以这样写:db.person.update({_id:1},{$set:{sex:"女"}}); |
$unset |
{ $unset: { <field1>: "", ... } } |
删除文档中的指定字段,若字段不存在则不操作 | 删除_id为1的文档的name字段db.person.update( { _id: 1}, { $unset: { name:"" } }) |
$min |
{ $min: { <field1>: <value1>, ... } } |
将文档中的某字段与指定值作比较,如果原值小于指定值,则不更新;若大于指定值,则更新: | db.scores.update( { _id: 1 }, { $min: { lowScore: 150 } } ) |
$max |
{ $min: { <field1>: <value1>, ... } } |
将文档中的某字段与指定值作比较,如果原值大于指定值,则不更新;若小于指定值,则更新: | db.scores.update( { _id: 1 }, { $min: { lowScore: 150 } } ) |
$currentDate |
{ $currentDate: { <field1>: <typeSpecification1>, ... } } |
设置指定字段为当前时间 | db.person.update( { _id: 1 }, { $currentDate: { "lastLogin": { $type: "timestamp" } } }) |
2.2 数组更新
名称 | 语法 | 描述 | 举例 |
$addToSet |
{ $ addToSet : { < field1 >: < value1 > , ... } } |
用于添加一个元素到array中,一般用于update | 查询age<20或者address是beijing的文档:db.test.update({_id:1},{$addToSet:{letters:["d","e"]}}) |
$pop |
{ $pop: { <field>: <-1 或1>, ... } } |
删除数组中的第一个或最后一个元素,-1表示第一个,没错,第一个;1表示最后一个! | db.test.update({_id:1},{$pop:{letters:-1}}); |
$pullAll |
{ $pullAll: { <field1>: [ <value1>, <value2> ... ], ... } } |
删除数组或内嵌文档字段中所有指定的元素 | 假设现有文档: { _id: 1, scores: [ 0, 2, 5, 5, 1, 0 ] } 执行:db.test.update( { _id: 1 }, { $pullAll: { scores: [ 0, 5 ] } } ) 结果:{ "_id" : 1, "scores" : [ 2, 1 ] } |
$pull |
{ $pull: { <field1>: <value 或者 condition>, <field2>: <value 或者 condition>, ... } } |
删除满足条件的元素 | 假设现有文档:{ _id: 1, votes: [ 3, 5, 6, 7, 7, 8 ] } 执行:db.test.update( { _id: 1 }, { $pull: { votes: { $gte: 6 } } } ) 结果:{ _id: 1, votes: [ 3, 5 ] } |
$push |
{ $push: { <field1>: <value1>, ... } } |
往数组中追加指定的元素,若文档中数组不存在,则创建并添加指定元素,自v2.4起,添加了对$.each的支持 | db.students.update( { _id: 1 }, { $push: { scores: 89 } }) |
$each |
{ $addToSet: { <field>: { $each: [ <value1>, <value2> ... ] } } } { $push: { <field>: { $each: [ <value1>, <value2> ... ] } } } |
||
$sort |
{ $push: { <field>: { $each: [ <value1>, <value2>, ... ], $sort: <sort specification> }} } |
配合$push使用,表示给文档中的指定数组元素排序,1是升序,-1是降序 | |
$position |
配合$push使用表示往数组元素中的指定位置插入元素 |
如需查看我的博客详情请点击下面的的阅读原文,即可进入我的博客查看本文
以上是关于Mongodb操作符表达式大全及实例的主要内容,如果未能解决你的问题,请参考以下文章