$project
¶将带有请求字段的文档传递到管道的下一个阶段。指定的字段可以是输入文档中的现有字段,也可以是新计算的字段。
该$project
阶段具有以下原型形式:
该工具$project
需要一个文档,该文档可以指定字段的包含,字段的抑制_id
,新字段的添加以及现有字段的值的重置。或者,您可以指定排除
字段。
该$project
规范有以下几种形式:
形成 | 描述 |
---|---|
<field>: <1 or true> |
指定包含一个字段。 |
_id: <0 or false> |
指定 |
<field>: <expression> |
添加新字段或重置现有字段的值。 |
<field>:<0 or false> |
指定排除字段。 要有条件地排除字段,请改用 如果您指定以外的其他字段 另请参见 |
3.4版的新功能。
如果指定一个或多个字段排除,则所有其他字段将在输出文档中返回。
如果指定除以外的其他字段_id
,则不能采用任何其他$project
规范形式:即,如果排除字段,则也不能指定包括字段,重置现有字段的值或添加新字段。此限制不适用于使用REMOVE
变量有条件地排除字段
。
另请参见$unset
排除字段的阶段。
注意
MongoDB还提供了$addFields
向文档添加新字段的功能。
要添加新字段或重置现有字段的值,请指定字段名称并将其值设置为某些表达式。有关表达式的更多信息,请参见表达式。
通过指定新字段并将其值设置为现有字段的字段路径,可以有效地重命名字段。
从MongoDB 3.2开始,$project
stage支持使用方括号[]
直接创建新的数组字段。如果数组规范包含文档中不存在的字段,则该操作将替换null
为该字段的值。有关示例,请参见Project New Array Fields。
_id
输出文档中的字段¶_id
默认情况下始终包含该字段。要从舞台_id
的输出文档中$project
排除该_id
字段,请0
在投影文档中将其设置为,以指定该字段的排除。
考虑books
包含以下文档的集合:
以下$project
阶段排除该_id
字段,但在其输出文档中包括title
和author
字段:
该操作产生以下文档:
3.4版的新功能。
考虑books
包含以下文档的集合:
以下$project
阶段从输出中排除author.first
和lastModified
字段:
或者,您可以将排除规范嵌套在文档中:
两种规格的结果相同:
另请参见$unset
排除字段的阶段。
3.6版的新功能。
从MongoDB 3.6开始,您可以REMOVE
在聚合表达式中使用变量有条件地禁止显示字段。
考虑books
包含以下文档的集合:
以下$project
阶段仅在REMOVE
变量author.middle
等于时才使用变量排除该字段""
:
聚合操作将产生以下输出: