比较运算符
$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 ] }
来源:https://blog.csdn.net/weixin_44713050/article/details/99233281