Docs 菜单
Docs 主页
/ / /
pymongo
/

指定要返回的字段

在此页面上

  • Overview
  • 样本数据
  • 投影类型
  • 指定要包含的字段
  • 排除 _id字段
  • 指定要排除的字段
  • 故障排除
  • “无法对包含投影中的字段 <field> 进行排除”
  • 更多信息
  • API 文档

在本指南中,您可以了解如何使用投影指定从读取操作中返回哪些字段。 投影是指定 MongoDB 从查询中返回哪些字段的文档。

本指南中的示例使用 Atlas示例数据集中 sample_restaurants.restaurants集合。 要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅 PyMongo入门指南。

您可以使用投影来指定要在返回文档中包含哪些字段,或指定要排除哪些字段。 除非要排除_id字段,否则不能在单个投影中组合包含和排除语句。

使用以下语法指定要包含在结果中的字段:

{ "<Field Name>": 1 }

以下示例使用find()方法查找name字段值为"Emerald Pub"的所有餐厅。 然后,它使用投影仅返回所返回文档中的namecuisineborough字段。

results = restaurants.find({ "name" : "Emerald Pub"}, {"name": 1, "cuisine": 1, "borough": 1})
for restaurant in results:
print(restaurant)
{'_id': ObjectId('...'), 'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub'}
{'_id': ObjectId('...'), 'borough': 'Queens', 'cuisine': 'American', 'name': 'Emerald Pub'}

当您使用投影指定要包含在返回文档中的字段时,默认情况下还会包含_id字段。 所有其他字段均会隐式排除。 要从返回文档中删除_id字段,您必须明确将其排除。

在指定要包含的字段时,您还可以从返回的文档中排除_id字段。

以下示例执行与前面的示例相同的查询,但从投影中排除_id字段:

results = restaurants.find({ "name" : "Emerald Pub"}, {"_id": 0, "name": 1, "cuisine": 1, "borough": 1})
for restaurant in results:
print(restaurant)
{'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub'}
{'borough': 'Queens', 'cuisine': 'American', 'name': 'Emerald Pub'}

使用以下语法指定要从结果中排除的字段:

{ "<Field Name>": 0 }

以下示例使用find()方法查找name字段值为"Emerald Pub"的所有餐厅。 然后,它使用投影从返回的文档中排除gradesaddress字段:

results = restaurants.find({ "name" : "Emerald Pub"}, {"grades": 0, "address": 0} )
for restaurant in results:
print(restaurant)
{'_id': ObjectId('...'), 'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub', 'restaurant_id': '40367329'}
{'_id': ObjectId('...'), 'borough': 'Queens', 'cuisine': 'American',
'name': 'Emerald Pub', 'restaurant_id': '40668598'}

当您使用投影指定要排除的字段时,任何未指定的字段都将隐式包含在返回文档中。

以下部分描述了使用投影时可能遇到的错误。

如果尝试在单个投影中包含和排除字段,驱动程序会返回OperationFailure并包含此消息。 确保投影仅指定要包含的字段或要排除的字段。

要学习;了解有关投影的更多信息,请参阅MongoDB Server手册中的“项目字段”指南

要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档:

后退

Retrieve Data