检索不同字段值
Overview
在本指南中,您可以学习;了解如何使用MongoDB PHP库检索集合中指定字段的不同值。
在集合中,不同文档的单个字段可能包含不同值。 示例, restaurants
集合中的一个文档的borough
值为'Manhattan'
,而另一文档的borough
值为'Queens'
。 通过使用MongoDB PHP库,您可以检索集合中多个文档中某个字段包含的所有唯一值。
样本数据
本指南中的示例使用 Atlas示例数据集的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 | The collation to use for the operation. Type: array|object |
maxTimeMS | The maximum amount of time in milliseconds that the operation can run. Type: integer |
comment | The comment to attach to the operation. Type: any valid BSON type |
readPreference | The read preference to use for the operation. To learn more, see
Read Preference in the Server manual. Type: MongoDB\Driver\ReadPreference |
以下示例检索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()
。