MongoDB操作符

微笑、不失礼 提交于 2019-11-27 01:32:47

比较运算符

$eq
释义: 匹配等于 (=) 指定值的文档

示例:

查询age=20的文档:
db.person.find( { age: { $eq: 20 } } )
相当于:
db.person.find( { age: 20 } )

$ne
释义:匹配不等于(≠)指定值的文档

$lt
释义:匹配小于(<)指定值的文档

$lte
释义: 匹配小于等于 (<=) 指定值的文档

$gt
释义:匹配大于 (>) 指定值的文档

$gte
释义:匹配大于等于 (>=) 指定值的文档

$in
释义:匹配数组中符合要求的值

示例:

查询该集合中字段qty的值与数组中的任意值相等的文档:
db.inventory.find( { qty: { $in: [ 5, 15 ] } } )

$nin
释义:不匹配数组中得值

逻辑操作符

$or
释义:或

示例:

查询age<20或者address是beijing的文档:
db.person.find( { $or: [ { age: { $lt: 20 } }, { address: "beijing" } ] } )

$and
释义:与

$not
释义:非

$nor
释义:一个条件都不满足

示例:

查询age既不等于20,sex也不是男的文档:
db.person.find( { $nor: [ { age: 20 },{ sex: "男"} ] } )

元素操作符

$exist
释义:查询存在指定字段的文档

示例:

查询存在phone字段的文档:
db.person.find( { phone: { $exists: true } } )

$type
释义:查询类型为指定类型的文档,3.2版本添加alias别名,各种类型的Number及Alias如下

示例:

假设存在这样一个集合:
{ "_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)}
查询该集合中zipCode字段的数据类型为String类型的文档:
db.addressBook.find( { "zipCode" : { $type : 2 } } );
db.addressBook.find( { "zipCode" : { $type : "string" } } );

数组操作符

$all
释义:与in类似,必须满足数组中所有的条件

$elemMatch(query)
释义:匹配内嵌文档和数组中的部分field

示例:

假设现有集合:
{ _id: 1, results: [ 82, 85, 88 ] }
{ _id: 2, results: [ 75, 88, 89 ] }
查询results数组中含有区间[80,85)元素的文档(结果为第一条):
db.scores.find( { results: { $elemMatch: { $gte: 80, $lt: 85 } } })

投影操作符

$(projection)
释义:查询数组中首个匹配条件的元素,相当于findOne()方法

示例:

假设现有如下集合students:
{ "_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 ] }
查询semester=1,并且grades中符合大于等于85的元素的第一个元素:
db.students.find( { semester: 1, grades: { $gte: 85 } },{ "grades.$": 1 } )

$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 },
           ]
}
查询zipcode为63109并且students数组中school=102的文档:
db.schools.find( { zipcode: "63109" },{ students: { $elemMatch: { school: 102 } } } )
返回如下结果:
{ "_id" : 1, "students" : [ { "name" : "john", "school" : 102, "age" : 10 } ] }

更新操作符

$inc
释义:将文档中的某个field对应的value自增/减某个数字amount,没有就创建

示例:

将_id为1的文档的age字段在原来的基础上+1:
db.person.update( { _id: 1 }, { $inc: { age: 1} })

$set
释义:更新文档中的某一个字段,而不是全部替换

$unset
释义:删除文档中的指定字段,若字段不存在则不操作

示例:

删除_id为1的文档的name字段
db.person.update( { _id: 1}, { $unset: { name:"" } })

$push
释义:在数组尾部追加一个元素

$pop
释义:删除数组第一个或最后一个元素(1:删除最后, -1:删除第一个)

示例:

db.test.update({_id:1},{$pop:{letters:-1}});

$pull
释义:删除满足条件的元素

示例:

假设现有文档:{ _id: 1, votes: [ 3, 5, 6, 7, 7, 8 ] }
执行:db.test.update( { _id: 1 }, { $pull: { votes: { $gte: 6 } } } )
结果:{ _id: 1, votes: [ 3, 5 ] }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!