对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

检索不同字段值

在本指南中,您可以学习;了解如何使用MongoDB PHP库检索集合中指定字段的不同值。

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

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

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

要学习如何创建免费的MongoDB 部署并加载示例数据集,请参阅MongoDB 入门指南

要检索指定字段的非重复值,请调用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

用于操作的读取偏好(read preference)。如需了解更多信息,请参阅服务器手册中的读取偏好(read preference)
类型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"
...

要为操作指定排序规则,请传递 $options大量参数,该参数将 collation 选项设置为操作方法。将 collation 选项分配给配置排序规则规则的大量。

下表描述了可以设立以配置排序规则的字段:

字段
说明

locale

(必选) 指定国际单字符组件 (ICU) 区域设置。有关支持的区域设置列表,请参阅 MongoDB Server 手册中的排序规则区域设置和默认参数

数据类型: string

caseLevel

(可选)指定是否包含大小写比较。

当设置为true 时,比较行为取决于strength 字段的值:

- 如果strength 为 ,则1 PHP
库比较基本字符和大小写。

- 如果strength2 ,则 PHP
库比较基本字符、变音符、其他从节点差异和大小写。

- 如果strength 为任何其他值,则忽略此字段。

当设置为 false 时,PHP 库不包含强度级别 12 的大小写比较。

数据类型bool
默认值false

caseFirst

(可选)指定三级比较期间大小写差异的排序顺序。

数据类型string
默认"off"

strength

(可选) 指定要执行的比较级别,如 ICU 文档 中所定义。

数据类型int
默认3

numericOrdering

(可选)指定驱动程序是将数字字符串作为数字还是字符串进行比较。

如果设置为 true,PHP 库将数字字符串作为数字进行比较。示例:在比较字符串 "10" 和 "2" 时,该库使用字符串的数字值,并将 "10" 视为大于 "2"。

如果设置为 false,PHP 库将数字字符串作为字符串进行比较。示例,在比较字符串 "10" 和 "2" 时,该库会一次比较一个字符,并将 "10" 视为小于 "2"。

有关更多信息,请参阅MongoDB Server手册中的排序规则限制

数据类型bool
默认false

alternate

(可选)指定库是否将空格和标点视为基本字符以进行比较。

数据类型string
默认"non-ignorable"

maxVariable

(可选)指定当 alternate 字段设置为 "shifted" 时,库认为可忽略的字符。

数据类型string
默认值"punct"

backwards

(可选)指定包含变音符号的字符串是否从字符串的后部到前部排序。

数据类型bool
默认false

要学习;了解有关排序规则和每个字段可能值的更多信息,请参阅MongoDB Server手册中的排序规则条目。

要学习;了解有关distinct()方法的详情,请参阅API文档中的MongoDB\Collection::distinct()