- MongoDB CRUD 操作 >
- MongoDB CRUD 教程 >
- 限制查询返回的字段
限制查询返回的字段¶
The projection document limits the fields to return for all matching documents. The projection document can specify the inclusion of fields or the exclusion of fields.
这个规范的格式如下:
语法 |
描述 |
---|---|
<field>: <1 or true> | 指定包含一个字段。 |
<field>: <0 or false> | 指定压制字段(排除一个字段)。 |
重要
默认地, _id 字段包含在结果集中。想要遏止 _id 字段出现在结果集中,可以在映射文档中指定 _id: 0 。
在一个单一的映射中, 除了 _id 字段之外,你不能把包含和排除语义结合在一起。
这个教程提供多方面的限制所有匹配文档返回字段的查询例子。这个教程里的例子使用一个集合 inventory 并且在 mongo 命令行中使用 db.collection.find() 方法。 db.collection.find() 方法返回检索到的文档的 cursor 。关于查询筛选条件的例子,请参见 查询文档 。
返回匹配文档的所有字段¶
如果你没有指定映射, find() 方法将返回所有匹配查询的文档的所有字段。
db.inventory.find( { type: 'food' } )
这个操作将返回 inventory 集合里 type 字段是 'food' 的所有文档。返回的文档包含它的所有字段。
仅仅返回指定的字段和 _id 字段¶
一个映射可以明确地包含几个字段。在下面的操作中, find() 方法返回所有匹配查询的文档。在结果集中,匹配文档里仅仅 item 和 qty 字段以及默认的 _id 返回。
db.inventory.find( { type: 'food' }, { item: 1, qty: 1 } )
仅仅返回指定的字段¶
你可以通过在映射中指定 _id 字段的排除在结果集中移除 _id 字段,如下例所示:
db.inventory.find( { type: 'food' }, { item: 1, qty: 1, _id:0 } )
这个操作返回所有匹配查询的文档。在结果集中, 在匹配文档里 * 仅仅 * item 和 qty 字段被返回。
返回除排除字段外的所有字段¶
想要排除单个字段或者一组字段,你可以使用一个如下格式的映射:
db.inventory.find( { type: 'food' }, { type:0 } )
这个操作返回所有的 type 字段值为 food 的所有文档。在结果集中,匹配文档里 type 字段不被返回。
除了 _id 字段外,你不能在映射文档里把包含和排除声明结合在一起。
数组字段的投影¶
对于包含数组的字段,MongoDB提供了如下的投影操作符: $elemMatch , $slice 以及 $ 。
例如, inventory 集合包含如下的文档:
{ "_id" : 5, "type" : "food", "item" : "aaa", "ratings" : [ 5, 8, 9 ] }
下面的操作使用 $slice 映射操作符以仅仅返回 ratings 数组里的前两个元素。
db.inventory.find( { _id: 5 }, { ratings: { $slice: 2 } } )
$elemMatch , $slice 和 $ 是映射一个数组的 portions 的 唯一的 方法。例如,你 不能 使用数组的索引来映射一个数组的一部分;比如: { "ratings.0": 1 } 映射数组的第一个元素。