Docs 主页 → 开发应用程序 → MongoDB Manual
查询返回的项目字段
在此页面上
➤ 使用右上角的 Select your language(选择语言)下拉菜单,设置以下示例的语言。
默认情况下,MongoDB 中的查询返回匹配文档中的所有字段。要限制 MongoDB 发送到应用程序的数据量,可以添加投影文档来指定或限制要返回的字段。
返回匹配文档中的所有字段
以下示例返回 inventory
集合中所有文档的所有字段,其中 status
等于 "A"
:
此操作对应于以下 SQL 语句:
SELECT * from inventory WHERE status = "A"
仅返回指定字段和_id
字段
通过在投影文档中将<field>
设置为1
,投影可以显式包含多个字段。以下操作会返回与查询匹配的所有文档。 在结果集中,匹配文档中仅返回item
、 status
和默认情况下的_id
字段。
此操作对应于以下 SQL 语句:
SELECT _id, item, status from inventory WHERE status = "A"
抑制_id
字段
您可通过在投影中将其设为 0
以便从结果中删除 _id
字段,如以下示例所示:
此操作对应于以下 SQL 语句:
SELECT item, status from inventory WHERE status = "A"
注意
除 _id
字段之外,您无法在投影文档中合并包含与排除声明。
返回除已排除字段之外的所有字段
您可以使用投影来排除特定字段,而不必在匹配文档中列出要返回的字段。以下示例将在匹配文档中返回除 status
和 instock
字段之外的所有字段:
注意
除 _id
字段之外,您无法在投影文档中合并包含与排除声明。
返回嵌入式文档中的特定字段
您可以返回嵌入式文档中的特定字段。使用点符号引用嵌入式字段,并在投影文档中设为 1
。
以下示例将返回:
_id
字段(默认返回)、item
字段。status
字段。size
文档中的uom
字段。
uom
字段仍会嵌入在 size
文档中。
您还可以使用嵌套表单指定嵌入式字段。例如, { item: 1, status: 1, size: { uom: 1 } }
。
抑制嵌入式文档中的特定字段
您可以隐藏嵌入式文档中的特定字段。使用点符号引用投影文档中的嵌入式字段,并设为 0
。
以下示例将指定一个投影来排除 size
文档内的 uom
字段。所有其他字段均会在匹配的文档中返回:
您还可以使用嵌套表单指定嵌入式字段。例如, { size: { uom: 0 } }
。
对数组中嵌入式文档的投影
使用点符号来投影嵌入数组中的文档内的特定字段。
以下示例指定要返回的投影:
_id
字段(默认返回)、item
字段。status
字段。嵌入到
instock
数组中的文档内的qty
字段。
已返回数组中特定于项目的数组元素
使用聚合表达式投影字段
您可以在查询投影中指定聚合表达式。通过使用聚合表达式,您可以投影新字段并修改现有字段的值。
例如,以下操作使用聚合表达式覆盖 status
字段的值,并投影新字段 area
和 reportNumber
。
注意
以下示例使用 MongoDB Shell 语法。有关使用聚合进行投影的驱动程序示例,请参阅 驱动程序文档。
db.inventory.find( { }, { _id: 0, item: 1, status: { $switch: { branches: [ { case: { $eq: [ "$status", "A" ] }, then: "Available" }, { case: { $eq: [ "$status", "D" ] }, then: "Discontinued" }, ], default: "No status found" } }, area: { $concat: [ { $toString: { $multiply: [ "$size.h", "$size.w" ] } }, " ", "$size.uom" ] }, reportNumber: { $literal: 1 } } )
[ { item: 'journal', status: 'Available', area: '294 cm', reportNumber: 1 }, { item: 'planner', status: 'Discontinued', area: '685.5 cm', reportNumber: 1 }, { item: 'notebook', status: 'Available', area: '93.5 in', reportNumber: 1 }, { item: 'paper', status: 'Discontinued', area: '93.5 in', reportNumber: 1 }, { item: 'postcard', status: 'Available', area: '152.5 cm', reportNumber: 1 } ]
其他注意事项
MongoDB 对投影执行额外的限制。有关详细信息,请参阅投影限制。