指定要返回的字段
概述
在本指南中,您可以学习如何使用 MongoDB PHP 库通过使用 投影 来指定从读取操作返回哪些字段。投影是一个文档,用于指定 MongoDB 从查询返回哪些字段。
示例数据
本指南中的示例使用来自sample_restaurants
数据库中的 restaurants
集合。要访问您的 PHP 应用程序中的此集合,请实例化一个连接到 Atlas 集群的 MongoDB\Client
并将以下值分配给您的 $collection
变量
$collection = $client->sample_restaurants->restaurants;
有关如何创建免费的 MongoDB Atlas 集群和加载数据集的说明,请参阅 Atlas 入门指南。
投影类型
您可以使用投影来指定要包含在返回文档中的字段,或指定要排除的字段。除非您要排除 _id
字段,否则您不能在单个投影中组合包含和排除语句。
指定包含的字段
要指定要包含在结果中的字段,请将一个选项数组传递给 MongoDB\Collection::findOne()
或 MongoDB\Collection::find()
方法,以设置 projection
选项。使用以下语法设置此选项
$options = [ 'projection' => [ '<field name>' => 1, ], ];
以下示例创建一个选项数组,并将 projection
选项设置为只返回匹配文档的 name
、cuisine
和 borough
字段。然后它调用 find()
方法来查找所有名为 '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"}
指定要排除的字段
要指定从结果中排除的字段,请将一个选项数组传递给 MongoDB\Collection::findOne()
或 MongoDB\Collection::find()
方法,以设置 projection
选项。使用以下语法设置此选项
$options = [ 'projection' => [ '<field name>' => 0, ], ];
以下示例创建一个选项数组,并将 projection
选项设置为排除匹配文档的 grades
和 address
字段。然后调用 find()
方法来查找所有名称字段值为 '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 文档