Overview
在本指南中,您可以学习;了解如何使用Ruby驾驶员通过投影来指定从读取操作中返回哪些字段。投影是指定MongoDB从查询中返回哪些字段的文档。
样本数据
本指南中的示例使用restaurants
sample_restaurants
Atlas示例数据集的 数据库中的Mongo::Client
集合。要从Ruby应用程序访问权限此集合,请创建一个连接到Atlas 集群的 对象,并将以下值分配给database
和collection
变量:
database = client.use('sample_restaurants') collection = database[:restaurants]
要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅Atlas入门指南。
投影类型
您可以使用投影来指定要在返回文档中包含或排除哪些字段。除非要排除 _id
字段,否则不能在单个投影中组合包含和排除语句。
指定要包含的字段
要在读取操作结果中包含特定字段,请在 find
方法的参数中指定 projection
选项。要设立此选项,请使用以下语法:
{ projection: { <field_name>: 1 } }
以下示例使用 find
方法查找 name
字段值为 'Emerald Pub'
的所有餐厅。然后,代码指定 projection
选项,指示查找操作仅返回匹配文档的 name
、cuisine
和 borough
字段:
opts = { projection: { name: 1, cuisine: 1, borough: 1 } } collection.find({ name: 'Emerald Pub' }, opts).each do |doc| puts doc end
{"_id"=>BSON::ObjectId('...'), "borough"=>"Manhattan", "cuisine"=>"American", "name"=>"Emerald Pub"} {"_id"=>BSON::ObjectId('...'), "borough"=>"Queens", "cuisine"=>"American", "name"=>"Emerald Pub"}
当您使用投影指定要包含在返回文档中的字段时,默认情况下还会包含_id
字段。 所有其他字段均会隐式排除。 要从返回文档中删除_id
字段,您必须明确将其排除。
排除_id
字段
在指定要包含的字段时,您还可以从返回的文档中排除_id
字段。
以下示例执行与上一示例相同的查询,但从投影中排除_id
字段:
opts = { projection: { name: 1, cuisine: 1, borough: 1, _id: 0 } } collection.find({ name: 'Emerald Pub' }, opts).each do |doc| puts doc end
{"borough"=>"Manhattan", "cuisine"=>"American", "name"=>"Emerald Pub"} {"borough"=>"Queens", "cuisine"=>"American", "name"=>"Emerald Pub"}
指定要排除的字段
要从读取操作结果中排除特定字段,请在 find
方法的参数中指定 projection
选项。要设立此选项,请使用以下语法:
{ projection: { <field_name>: 0 } }
以下示例使用 find
方法查找 name
字段值为 'Emerald Pub'
的所有餐厅。然后,代码使用 projection
选项指示查找操作省略结果中的 grades
和 address
字段:
opts = { projection: { grades: 0, address: 0 } } collection.find({ name: 'Emerald Pub' }, opts).each do |doc| puts doc end
{"_id"=>BSON::ObjectId('...'), "borough"=>"Manhattan", "cuisine"=>"American", "name"=>"Emerald Pub", "restaurant_id"=>"40367329"} {"_id"=>BSON::ObjectId('...'), "borough"=>"Queens", "cuisine"=>"American", "name"=>"Emerald Pub", "restaurant_id"=>"40668598"}
当您使用投影指定要排除的字段时,任何未指定的字段都将隐式包含在返回文档中。
更多信息
要学习;了解有关投影的更多信息,请参阅MongoDB Server手册中的“项目字段”指南。
API 文档
要学习;了解有关find
方法的详情,请参阅API文档。