Overview
在本指南中,您可以学习;了解如何使用MongoDB PHP库检索集合中指定字段的不同值。
在集合中,不同文档的单个字段可能包含不同值。 示例, restaurants集合中一个文档的borough值为'Manhattan' ,而另一文档的borough值为'Queens' 。 通过使用MongoDB PHP库,您可以检索集合中多个文档中某个字段包含的所有唯一值。
样本数据
restaurantssample_restaurants本指南中的示例使用Atlas示例数据集的 数据库中的MongoDB\Client 集合。要从PHP应用程序访问权限此集合,请实例化一个连接到Atlas 集群的 ,并将以下值分配给$collection 变量:
$collection = $client->sample_restaurants->restaurants;
要了解如何创建免费的 MongoDB 部署并加载示例数据集,请参阅 MongoDB入门指南。
MongoDB\Collection::distinct() 方法
要检索指定字段的非重复值,请调用MongoDB\Collection::distinct()方法并传入要查找非重复值的字段的名称。
检索集合中的不同值
以下示例检索restaurants集合中borough字段的非重复值:
$results = $collection->distinct('borough', []); foreach ($results as $value) { echo json_encode($value), PHP_EOL; }
该操作返回一个大量,用于存储每个不同的borough字段值。 尽管多个文档在borough字段中具有相同的值,但每个值仅在结果中出现一次。
检索指定文档中的不同值
您可以为distinct()方法提供查询过滤,以查找集合中文档子集合的不同字段值。 查询过滤是一个表达式,用于指定在操作中匹配文档的搜索条件。 有关创建查询过滤的更多信息,请参阅“指定查询”指南。
以下示例检索cuisine字段值为'Italian'的所有文档的borough字段的非重复值:
$results = $collection->distinct('borough', ['cuisine' => 'Italian']); foreach ($results as $value) { echo json_encode($value), PHP_EOL; }
修改不同行为
您可以通过传递指定选项值的大量来修改distinct()方法的行为。 下表描述了可用于自设立操作的一些选项:
选项 | 说明 |
|---|---|
| |
| 操作可以运行的最长时间(毫秒)。 |
| 要添加到操作的注释。 |
| |
| 用于操作的索引。 |
以下示例检索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; }
排序规则
要为操作指定排序规则,请传递 $options大量参数,该参数将 collation 选项设置为操作方法。将 collation 选项分配给配置排序规则规则的大量。
下表描述了可以设立以配置排序规则的字段:
字段 | 说明 |
|---|---|
| |
| (可选)指定是否包含大小写比较。 |
| (可选)指定三级比较期间大小写差异的排序顺序。 |
| (可选)指定要执行的比较级别,如 ICU 文档中所定义。数据类型: |
| |
| (可选)指定库是否将空格和标点视为基本字符以进行比较。 |
| (可选)指定当 |
| (可选)指定包含变音符号的字符串是否从字符串的后部到前部排序。 |
要学习;了解有关排序规则和每个字段可能值的更多信息,请参阅MongoDB Server手册中的排序规则条目。
API 文档
要学习;了解有关distinct()方法的详情,请参阅API文档中的MongoDB\Collection::distinct() 。