Docs 菜单
Docs 主页
/ / /
PHP 库手册
/

检索不同字段值

在此页面上

  • Overview
  • 样本数据
  • MongoDB\Collection::distinct() 方法
  • 检索集合中的不同值
  • 检索指定文档中的不同值
  • 修改不同行为
  • API 文档

在本指南中,您可以学习;了解如何使用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()方法并传入要查找非重复值的字段的名称。

以下示例检索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"
...

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

后退

指定查询