mongodb 常用操作符
来源:互联网 发布:蚂蚁影院源码 编辑:程序博客网 时间:2024/06/13 21:36
最近常用mongodb数据库,但是很多操作符不清楚或不知道,所有抽空根据手册整理下,以便于以后查阅(基于3.4版本)
1.查询和投影操作符
1.1比较操作符
$eq
匹配字段值等于指定值的文档
{ <field>: { $eq: <value> } }
$gt
匹配字段值大于指定值的文档
{ <field>: { $gt: <value> } }
$gte
匹配字段值大于等于指定值的文档
{ <field>: { $gte: <value> } }
$lt
匹配字段值小于指定值的文档
{ <field>: { $gte: <value> } }
$lte
匹配字段值小于等于指定值的文档
{ <field>: { $lte: <value> } }
$ne
匹配字段值不等于指定值的文档,包括没有这个字段的文档
{ <field>: { $ne: <value> } }
$in
匹配字段值等于指定数组中的任何值
{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }
字段值为数组类型时,数组中至少有一个元素在指定数组中
{ _id: 1, item: "abc", qty: 10, tags: [ "school", "clothing" ], sale: false }db.inventory.update( { tags: { $in: ["appliances", "school"] } }, { $set: { sale:true } } )sale值被成功改为true
$nin
字段值不在指定数组或者不存在
{ field: { $nin: [ <value1>, <value2> ... <valueN> ]} }
字段值为数组类型时,数组中没有一个元素与指定数组中元素相等
1.2逻辑操作符
$or
文档至少满足其中的一个表达式
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
$and
{ $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }
$not
字段值不匹配表达式或者字段值不存在
{ field: { $not: { <operator-expression> } } }
$nor
字段值不匹配所有的表达式的文档,包括那些不包含这些字段的文档
{ $nor: [ { <expression1> }, { <expression2> }, ... { <expressionN> } ] }
1.3元素操作符
$exists
<boolean> 等于true时,字段存在,包括字段值为null的文档
<boolean> 等于false时,字段不存在
{ field: { $exists: <boolean> } }
$type
匹配字段值为指定数据类型的文档
{ field: { $type: <BSON type number> | <String alias> } }
举例如下:
db.addressBook.insertMany( [ { "_id" : 1, address : "2030 Martian Way", zipCode : "90698345" }, { "_id" : 2, address: "156 Lunar Place", zipCode : 43339374 }, { "_id" : 3, address : "2324 Pluto Place", zipCode: NumberLong(3921412) }, { "_id" : 4, address : "55 Saturn Ring" , zipCode : NumberInt(88602117) } ])db.addressBook.find( { "zipCode" : { $type : 2 } } );db.addressBook.find( { "zipCode" : { $type : "string" } } );查询结果为:{ "_id" : 1, "address" : "2030 Martian Way", "zipCode" : "90698345" }
1.4评估操作符
$mod
匹配字段值被除有指定的余数的文档
{ field: { $mod: [ divisor(除数), remainder(余数) ] } }
{ "_id" : 1, "item" : "abc123", "qty" : 0 }{ "_id" : 2, "item" : "xyz123", "qty" : 5 }{ "_id" : 3, "item" : "ijk123", "qty" : 12 }db.inventory.find( { qty: { $mod: [ 4, 0 ] } } )查询结果为:{ "_id" : 1, "item" : "abc123", "qty" : 0 }{ "_id" : 3, "item" : "ijk123", "qty" : 12 }
$regex
正则表达式可以匹配到的文档
{ <field>: { $regex: /pattern/, $options: '<options>' } }{ <field>: { $regex: 'pattern', $options: '<options>' } }{ <field>: { $regex: /pattern/<options> } }
$text
针对创建了全文索引的字段进行文本搜索
{ $text: { $search: <string>, $language: <string>, $caseSensitive: <boolean>, $diacriticSensitive: <boolean> }}
$where
可以通过js表达式或js函数来查询文档
1.5数组操作符
$all
字段值是包含所有指定元素的数组的文档
{ <field>: { $all: [ <value1> , <value2> ... ] } }
举例如下:
{ _id: ObjectId("5234cc89687ea597eabee675"), code: "xyz", tags: [ "school", "book", "bag", "headphone", "appliance" ],}{ _id: ObjectId("5234cc8a687ea597eabee676"), code: "abc", tags: [ "appliance", "school", "book" ],}{ _id: ObjectId("5234ccb7687ea597eabee677"), code: "efg", tags: [ "school", "book" ],}{ _id: ObjectId("52350353b2eff1353b349de9"), code: "ijk", tags: [ "electronics", "school" ],}db.inventory.find( { tags: { $all: [ "appliance", "school", "book" ] } } )查询结果:{ _id: ObjectId("5234cc89687ea597eabee675"), code: "xyz", tags: [ "school", "book", "bag", "headphone", "appliance" ],}{ _id: ObjectId("5234cc8a687ea597eabee676"), code: "abc", tags: [ "appliance", "school", "book" ],}
$elemMatch
数组字段至少一个元素满足所有指定查询条件的文档
{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }
$size
匹配数组字段元素个数等于指定数量的文档
db.collection.find( { field: { $size: 2 } } );
1.6投影操作符
$ (projection)
限定查询结果中指定数组字段返回满足条件的第一个元素
举例如下:
文档集合{ "_id" : 1, "semester" : 1, "grades" : [ 70, 87, 90 ] }{ "_id" : 2, "semester" : 1, "grades" : [ 90, 88, 92 ] }{ "_id" : 3, "semester" : 1, "grades" : [ 85, 100, 90 ] }{ "_id" : 4, "semester" : 2, "grades" : [ 79, 85, 80 ] }{ "_id" : 5, "semester" : 2, "grades" : [ 88, 88, 92 ] }{ "_id" : 6, "semester" : 2, "grades" : [ 95, 90, 96 ] }查询语句db.students.find( { semester: 1, grades: { $gte: 85 } }, { "grades.$": 1 } )查询结果{ "_id" : 1, "grades" : [ 87 ] }{ "_id" : 2, "grades" : [ 90 ] }{ "_id" : 3, "grades" : [ 85 ] }
$elemMatch (projection)
限定查询结果中指定数组字段返回满足条件的第一个元素
举例如下
文档集合:{ _id: 1, zipcode: "63109", students: [ { name: "john", school: 102, age: 10 }, { name: "jess", school: 102, age: 11 }, { name: "jeff", school: 108, age: 15 } ]}{ _id: 2, zipcode: "63110", students: [ { name: "ajax", school: 100, age: 7 }, { name: "achilles", school: 100, age: 8 }, ]}{ _id: 3, zipcode: "63109", students: [ { name: "ajax", school: 100, age: 7 }, { name: "achilles", school: 100, age: 8 }, ]}{ _id: 4, zipcode: "63109", students: [ { name: "barney", school: 102, age: 7 }, { name: "ruth", school: 102, age: 16 }, ]}查询语句:db.schools.find( { zipcode: "63109" }, { students: { $elemMatch: { school: 102 } } } )查询结果:{ "_id" : 1, "students" : [ { "name" : "john", "school" : 102, "age" : 10 } ] }{ "_id" : 3 }{ "_id" : 4, "students" : [ { "name" : "barney", "school" : 102, "age" : 7 } ] }
$slice (projection)
控制指定数组字段返回元素个数
db.collection.find( { field: value }, { array: {$slice: count } } );
2.更新操作符
2.1字段更新
$inc
给一个字段增加指定值
{ $inc: { <field1>: <amount1>, <field2>: <amount2>, ... } }
$mul
{ $mul: { field: <number> } }
$rename
{$rename: { <field1>: <newName1>, <field2>: <newName2>, ... } }
$setOnInsert
upsert为true时,有插入文档操作时插入指定字段值
db.collection.update( <query>, { $setOnInsert: { <field1>: <value1>, ... } }, { upsert: true })
$set
{ $set: { <field1>: <value1>, ... } }
$unset
删除指定字段
{ $unset: { <field1>: "", ... } }
$min
指定值小于当前值则更新为指定值
{ $min: { <field1>: <value1>, ... } }
$max
指定值大于当前值则更新为指定值
{ $max: { <field1>: <value1>, ... } }
$currentDate
设置字段值为当前日期
指定值为true设置为当前日期, 或者{ $type: “timestamp” }或{ $type: “date” }的形式”timestamp”和”date”必须是小写的
{ $currentDate: { <field1>: <typeSpecification1>, ... } }
2.2数组更新
$
更新指定数组的第一个元素
{ "<array>.$" : value }
$addToSet
数组字段增加一个值
{ $addToSet: { <field1>: <value1>, ... } }
$pop
删除数组字段中的第一个或最后一个元素
{ $pop: { <field>: <-1 | 1>, ... } }
$pullAll
删除数组字段中所有指定值,如果指定值为数组,则删除匹配数组内的元素
{ $pullAll: { <field1>: [ <value1>, <value2> ... ], ... } }
$pull
符合条件的值将被删除
{ $pull: { <field1>: <value|condition>, <field2>: <value|condition>, ... } }
$pushAll
向数组中追加多个指定值
{ $pushAll: { <field>: [ <value1>, <value2>, ... ] } }
$push
向数组中追加值
{ $push: { <field1>: <value1>, ... } }
$each
用于 $addToSet添加多个值到数组中
{ $addToSet: { <field>: { $each: [ <value1>, <value2> ... ] } } }
追加多个值到数组中
{ $push: { <field>: { $each: [ <value1>, <value2> ... ] } } }
$slice
限定$push操作时数组元素的个数
必须和$each一起使用
{ $push: { <field>: { $each: [ <value1>, <value2>, ... ], $slice: <num> } }}
$sort
与$each一起使用
{ $push: { <field>: { $each: [ <value1>, <value2>, ... ], $sort: <sort specification> } }}
$position
与$each一起使用
<num>从0开始的索引值
{ $push: { <field>: { $each: [ <value1>, <value2>, ... ], $position: <num> } }}
3.聚合管道操作符
$project
管道中字段的增加、删除和重命名
{ $project: { <specification(s)> } }
$match
{ $match: { <query> } }
$limit
{ $limit: <positive integer> }
$skip
{ $skip: <positive integer> }
$unwind
文档按照数组字段进行拆分
举例如下:
文档:{ "_id" : 1, "item" : "ABC1", sizes: [ "S", "M", "L"] }管道语句:db.inventory.aggregate( [ { $unwind : "$sizes" } ] )结果:{ "_id" : 1, "item" : "ABC1", "sizes" : "S" }{ "_id" : 1, "item" : "ABC1", "sizes" : "M" }{ "_id" : 1, "item" : "ABC1", "sizes" : "L" }
$group
{ $group: { _id: <expression>, <field1>: { <accumulator1> : <expression1> }, ... } }
举例如下
文档集合:{ "_id" : 8751, "title" : "The Banquet", "author" : "Dante", "copies" : 2 }{ "_id" : 8752, "title" : "Divine Comedy", "author" : "Dante", "copies" : 1 }{ "_id" : 8645, "title" : "Eclogues", "author" : "Dante", "copies" : 2 }{ "_id" : 7000, "title" : "The Odyssey", "author" : "Homer", "copies" : 10 }{ "_id" : 7020, "title" : "Iliad", "author" : "Homer", "copies" : 10 }分组:db.books.aggregate( [ { $group : { _id : "$author", books: { $push: "$title" } } } ])结果:{ "_id" : "Homer", "books" : [ "The Odyssey", "Iliad" ] }{ "_id" : "Dante", "books" : [ "The Banquet", "Divine Comedy", "Eclogues" ] }分组:db.books.aggregate( [ { $group : { _id : "$author", books: { $push: "$$ROOT" } } } ])结果:{ "_id" : "Homer", "books" : [ { "_id" : 7000, "title" : "The Odyssey", "author" : "Homer", "copies" : 10 }, { "_id" : 7020, "title" : "Iliad", "author" : "Homer", "copies" : 10 } ]}{ "_id" : "Dante", "books" : [ { "_id" : 8751, "title" : "The Banquet", "author" : "Dante", "copies" : 2 }, { "_id" : 8752, "title" : "Divine Comedy", "author" : "Dante", "copies" : 1 }, { "_id" : 8645, "title" : "Eclogues", "author" : "Dante", "copies" : 2 } ]}
$sort
{ $sort: { <field1>: <sort order>, <field2>: <sort order> ... } }
$lookup
两个集合之间的关联
{ $lookup: { from: <collection to join>, localField: <field from the input documents>, foreignField: <field from the documents of the "from" collection>, as: <output array field> }}
$count
{ $count: <string> }
- MongoDB常用操作符
- mongodb 常用操作符
- MongoDB常用操作
- MongoDB常用操作
- mongodb常用操作
- MongoDB常用操作
- MongoDB常用操作
- MongoDB常用操作
- MongoDB 常用基本操作
- MongoDB数据库常用操作
- MongoDB Shell 常用操作
- Mongodb常用操作
- MongoDB常用操作
- mongodb & mongoose 常用操作
- MongoDB常用操作
- Mongodb shell 常用操作
- MongoDB常用操作
- mongodb常用操作
- Android 7.1.1 编译出错
- C语言指针专题——指针难学的4点原因
- 跳转,Intent跳转页面
- 守护线程
- Avalon2简介
- mongodb 常用操作符
- java容器类的继承结构
- B2Ctt商城08 Solr
- JavaScript对象
- Mac查看隐藏文件
- python从基础开始
- hudson入门与实战
- vue组件化挖矿之旅(二):vue-cli 项目的学习资料汇总
- 常见网页布局