OPTIONS
翻译或纠错本页面

限制查询返回的字段

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() 方法返回所有匹配查询的文档。在结果集中,匹配文档里仅仅 itemqty 字段以及默认的 _id 返回。

db.inventory.find( { type: 'food' }, { item: 1, qty: 1 } )

仅仅返回指定的字段

你可以通过在映射中指定 _id 字段的排除在结果集中移除 _id 字段,如下例所示:

db.inventory.find( { type: 'food' }, { item: 1, qty: 1, _id:0 } )

这个操作返回所有匹配查询的文档。在结果集中, 在匹配文档里 * 仅仅 * itemqty 字段被返回。

返回除排除字段外的所有字段

想要排除单个字段或者一组字段,你可以使用一个如下格式的映射:

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 } 映射数组的第一个元素。