检索不同的字段值
概述
在这份指南中,您可以学习如何使用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()
方法
要获取指定字段的唯一值,请调用 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" ...
API 文档
要了解更多关于 distinct()
方法的知识,请参阅 API 文档中的 MongoDB\Collection::distinct()
。