指定要返回的字段
Overview
在本指南中,您可以学习;了解如何使用MongoDB PHP库通过投影来指定从读取操作中返回哪些字段。 投影是指定MongoDB从查询中返回哪些字段的文档。
样本数据
本指南中的示例使用 Atlas示例数据集的sample_restaurants
数据库中的 restaurants
集合。 要从PHP应用程序访问权限此集合,请实例化一个连接到Atlas 集群的MongoDB\Client
,并将以下值分配给$collection
变量:
$collection = $client->sample_restaurants->restaurants;
要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅Atlas入门指南。
投影类型
您可以使用投影来指定要在返回文档中包含哪些字段,或指定要排除哪些字段。 除非要排除_id
字段,否则不能在单个投影中组合包含和排除语句。
指定要包含的字段
要指定结果中包含的字段,请将选项大量传递给设置projection
选项的MongoDB\Collection::findOne()
或MongoDB\Collection::find()
方法。 使用以下语法设立此选项:
$options = [ 'projection' => [ '<field name>' => 1, ], ];
以下示例创建一个选项大量并将projection
选项设置为仅返回匹配文档的name
、 cuisine
和borough
字段。 然后,它调用find()
方法查找name
字段值为'Emerald Pub'
的所有餐厅,并将选项大量作为参数传递给find()
:
$options = [ 'projection' => [ 'name' => 1, 'cuisine' => 1, 'borough' => 1, ], ]; $cursor = $collection->find(['name' => 'Emerald Pub'], $options); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_id":{"$oid":"..."},"borough":"Manhattan","cuisine":"American","name":"Emerald Pub"} {"_id":{"$oid":"..."},"borough":"Queens","cuisine":"American","name":"Emerald Pub"}
当您使用投影指定要包含在返回文档中的字段时,默认情况下还会包含_id
字段。 所有其他字段均会隐式排除。 要从返回文档中删除_id
字段,您必须明确将其排除。
排除_id
字段
在指定要包含的字段时,您还可以从返回的文档中排除_id
字段。
以下示例执行与上一示例相同的查询,但从投影中排除_id
字段:
$options = [ 'projection' => [ '_id' => 0, 'name' => 1, 'cuisine' => 1, 'borough' => 1, ], ]; $cursor = $collection->find(['name' => 'Emerald Pub'], $options); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"borough":"Manhattan","cuisine":"American","name":"Emerald Pub"} {"borough":"Queens","cuisine":"American","name":"Emerald Pub"}
指定要排除的字段
要指定要从结果中排除的字段,请将选项大量传递给设置projection
选项的MongoDB\Collection::findOne()
或MongoDB\Collection::find()
方法。 使用以下语法设立此选项:
$options = [ 'projection' => [ '<field name>' => 0, ], ];
以下示例创建一个选项大量并设置projection
选项以排除匹配文档的grades
和address
字段。 然后,它调用find()
方法查找name
字段值为'Emerald Pub'
的所有餐厅,并将选项大量作为参数传递给find()
:
$options = [ 'projection' => [ 'grades' => 0, 'address' => 0, ], ]; $cursor = $collection->find(['name' => 'Emerald Pub'], $options); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_id":{"$oid":"..."},"borough":"Manhattan","cuisine":"American", "name":"Emerald Pub","restaurant_id":"40367329"} {"_id":{"$oid":"..."},"borough":"Queens","cuisine":"American", "name":"Emerald Pub","restaurant_id":"40668598"}
当您使用投影指定要排除的字段时,任何未指定的字段都将隐式包含在返回文档中。
更多信息
要学习;了解有关投影的更多信息,请参阅MongoDB Server手册中的“项目字段”指南。
API 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: