Docs 菜单
Docs 主页
/ / /
PHP 库手册
/

指定要返回的字段

在此页面上

  • Overview
  • 样本数据
  • 投影类型
  • 指定要包含的字段
  • 排除 _id字段
  • 指定要排除的字段
  • 更多信息
  • API 文档

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

$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选项以排除匹配文档的gradesaddress字段。 然后,它调用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 文档:

  • MongoDB\Collection::findOne()

  • MongoDB\Collection::find()

后退

Retrieve Data