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

检索不同的字段值

本页内容

  • 概述
  • 示例数据
  • MongoDB\Collection::distinct() 方法
  • 跨集合检索不同值
  • 跨指定文档检索不同值
  • 修改不同行为
  • API文档

在这份指南中,您可以学习如何使用MongoDB PHP库从集合中检索指定字段的唯一值。

在集合中,不同的文档可能包含单个字段的不同值。例如,一个在restaurants 集合中的文档有一个 borough 值为 'Manhattan',另一个有一个 borough 值为 'Queens'。通过使用MongoDB PHP库,您可以检索字段在集合中包含的所有唯一值。

本指南中的示例使用来自 sample_restaurants 数据库的 restaurants 集合。要访问此集合,从您的PHP应用程序实例化一个连接到Atlas集群的 MongoDB\Client,并将以下值分配给您的 $collection 变量

$collection = $client->sample_restaurants->restaurants;

有关如何创建免费的MongoDB Atlas集群并加载数据集的说明,请参阅 Atlas入门 指南。

要获取指定字段的唯一值,请调用 MongoDB\Collection::distinct() 方法,并传入您想找到唯一值的字段名称。

以下示例检索了 restaurants 集合中 borough 字段的唯一值

$results = $collection->distinct('borough', []);
foreach ($results as $value) {
echo json_encode($value), PHP_EOL;
}
"Bronx"
"Manhattan"
"Missing"
"Queens"
"Staten Island"

此操作返回一个数组,存储每个唯一的 borough 字段值。尽管多个文档在 borough 字段中具有相同的值,但每个值在结果中只出现一次。

您可以向 distinct() 方法提供一个 查询过滤器,以找到集合中子集的文档的唯一字段值。查询过滤器是一个表达式,用于指定在操作中匹配文档的搜索条件。有关创建查询过滤器的更多信息,请参阅指定查询指南。

以下示例检索了所有具有 cuisine 字段值为 'Italian' 的文档中 borough 字段的唯一值

$results = $collection->distinct('borough', ['cuisine' => 'Italian']);
foreach ($results as $value) {
echo json_encode($value), PHP_EOL;
}
"Bronx"
"Manhattan"
"Queens"
"Staten Island"

您可以通过传递一个指定选项值的数组来修改 distinct() 方法的行为。下表描述了一些可以设置的选项以自定义操作

选项
描述
collation
用于操作的排序方式。
类型: array|object
maxTimeMS
操作可运行的最大毫秒数。
类型: integer
comment
要附加到操作的注释。
类型: 任何有效的 BSON 类型
readPreference
用于操作的读取偏好。有关更多信息,请参阅服务器手册中的 读取偏好
类型: MongoDB\Driver\ReadPreference
hint
用于操作的索引。
类型: string|object

以下示例检索所有具有 borough 字段值为 'Bronx'cuisine 字段值为 'Pizza' 的文档的 name 字段的唯一值。它还指定了选项数组中的 comment 字段以向操作添加注释

$query = ['borough' => 'Bronx', 'cuisine' => 'Pizza'];
$options = ['comment' => 'Bronx pizza restaurants'];
$results = $collection->distinct('name', $query, $options);
foreach ($results as $value) {
echo json_encode($value), PHP_EOL;
}
"$1.25 Pizza"
"18 East Gunhill Pizza"
"2 Bros"
"Aenos Pizza"
"Alitalia Pizza Restaurant"
"Amici Pizza And Pasta"
"Angie'S Cafe Pizza"
...

要了解更多关于 distinct() 方法的知识,请参阅 API 文档中的 MongoDB\Collection::distinct()

返回

指定查询