元素组合满足查询条件:查询users集合中points数组中的一个内嵌文档的points字段小于等于70并且同时另一个内嵌文档的bonus等于20或者有一个内嵌文档同时满足以上两个条件的所有文档。
db.users.find( { "points.points": { $lte: 70 }, "points.bonus": 20 } )
查找为null或者不存在的字段:
不能使用db.users.find( { name: null } ),这样会同时返回name字段等于null和不存在name字段的所有文档
使用类型筛查查找为null的文档:db.users.find( { name : { $type: 10 } } ) => 只查找name字段为null的所有文档
使用存在性筛查不存在字段的所有文档:db.users.find( { name : { $exists: false } } ) =>查找出不存在name字段的所有文档
==========================================================================================
上面讲完了查询的匹配条件,接下来是查询结果映射:也就是find函数第二个参数的意义
返回查询的映射字段:上面我们查询方法中的 <projection>文档,映射文档用来指明返回结果中包括和排除哪些字段,下面是<projection>文档(find方法的第二个参数)
{ field1: <value>, field2: <value> ... }
其中field字段名称,<value>的值为1或true表示在返回的文档中包含此字段,<value>的值为0或者false则返回的文档中不会包含此字段。若不显示指明_id的显示或隐藏则会默认返回文档中会包含_id字段,一个<projection>文档不能同时指定包括和排除的字段,除了排除_id字段,在显式包括字段的映射中_id字段是唯一一个可以显式排除的字段。
1. 查询返回users集合中status值为”A”的所有文档包含文档的所有字段
(1) db.users.find( { status: "A" } )
2. 在查询的结果集中只返回匹配文档的name,status以及默认的_id字段,同时也可以显式排除_id字段
(1) db.users.find( { status: "A" }, { name: 1, status: 1 } )
(2) db.users.find( { status: "A" }, { name: 1, status: 1, _id: 0 } )
3. 返回排除字段之外的所有的字段:返回favorites,points字段外所有字段
(1) db.users.find( { status: "A" }, { favorites: 0, points: 0 } )
4. 返回嵌入文档中指定字段和排除嵌入文档中的字段:(1)返回_id,status,name,和嵌入文档favorites中的food字段food字段仍然在嵌入文档favorites中。(2)返回排除嵌入文档favorites中food外的所有字段
(1) db.users.find({ status: "A" },{ name: 1, status: 1, "favorites.food": 1 })
(2) db.users.find({ status: "A" },{ "favorites.food": 0 })
5. 映射数组中的嵌入文档:返回name,status字段以及points数组文档中包含bonus字段的文档
(1) db.users.find( { status: "A" }, { name: 1, status: 1, "points.bonus": 1 } )
6. 映射返回数组中特定的数组元素:MongoDB包含下面映射操作符$elemMatch,$slice,以及$,他们是用来返回指定防范会数组中包含映射元素的唯一方式,不能使用数组索引来映射指定元素
==========================================================================================
③更新文档: