文档菜单
文档首页
/ / /
PHP库手册
/

指定要返回的字段

在本页

  • 概述
  • 示例数据
  • 投影类型
  • 指定要包含的字段
  • 排除_id 字段
  • 指定要排除的字段
  • 附加信息
  • API 文档

在本指南中,您可以学习如何使用 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 选项设置为只返回匹配文档的 namecuisineborough 字段。然后它调用 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 字段排除

$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 选项设置为排除匹配文档的 gradesaddress 字段。然后调用 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 文档

  • MongoDB\Collection::findOne()

  • MongoDB\Collection::find()

返回

检索数据