指定or条件:在集合users中查找出所有status等于”A”或者age小于30的所有文档
db.users.find({
$or: [ { status: "A" }, { age: { $lt: 30 } } ]
})
指定and和or条件:在集合users中查找出status等于”A”并且要么age小于30要么type等于1的所有文档
db.users.find({
status: "A",
$or: [ { age: { $lt: 30 } }, { type: 1 } ]
})
嵌入文档查询:
嵌入文档上的精确匹配:从users集合中查找出所有favorities字段只以该种顺序且只包含artist等于"Picasso"和food等于 "pizza"的所有内嵌文档
db.users.find( { favorites: { artist: "Picasso", food: "pizza" } } )
嵌入文档中字段等于匹配:查询所有favorities字段中含有artist等于"Picasso"(这里可能含有其他的字段)的内嵌文档
db.users.find( { "favorites.artist": "Picasso" } )
数组上的查询:(类似于嵌套文档的查询)
数组上的精确匹配:查询出所有badges字段是一个正好只有有"blue", "black" 这两个这种顺序的元素的数组的所有文档
db.users.find( { badges: [ "blue", "black" ] } )
匹配一个数组元素:查找users集合中badges字段数组中包含”black”元素(可能包含其他元素)的所有文档
db.users.find( { badges: "black" } )
匹配数组中指定的元素:查找出users集合中badges数组的第一个元素等于”black”的所有文档
db.users.find( { "badges.0": "black" } )
指定数组元素多个查询条件:单个数组元素满足查询条件需要使用$elemMatch:查找出集合users中finished数组中至少有一个元素大于15并且小于20的所有文档
db.users.find( { finished: { $elemMatch: { $gt: 15, $lt: 20 } } } )
元素组合满足条件:查找出users集合中一个元素大于15的同时另一个元素小于20或者有一个元素同时满足大于15小于20的所有的文档
db.users.find( { finished: { $gt: 15, $lt: 20 } } )
嵌入文档数组查询:
使用数组索引匹配嵌入文档中的字段:查找出points数组第一个文档元素中的points字段小于等于55的所有文档
db.users.find( { 'points.0.points': { $lte: 55 } } )
不指定索引匹配字段:查找出points数组中至少有一个嵌入文档的points字段小于或等于55的所有文档。
db.users.find( { 'points.points': { $lte: 55 } } )
指定数组文档的多个查询条件:
单个元素满足查询条件(使用$elemMatch):查询users集合中points数组中至少有一个内嵌文档的points字段小于等于70并且bonus等于20的所有文档
db.users.find( { points: { $elemMatch: { points: { $lte: 70 }, bonus: 20 } } } )