统计文档数量
概述
在本指南中,您可以学习如何使用MongoDB PHP库来检索集合中文档数量的准确值和估计值。以下方法用于在集合中计算文档
MongoDB\Collection::countDocuments():返回匹配查询过滤器或存在于集合中的文档的确切数量MongoDB\Collection::estimatedDocumentCount():返回集合中的文档估计数量
示例数据
本指南中的示例使用来自 Atlas 示例数据集 的 companies 集合和 sample_training 数据库。要从您的PHP应用程序中访问此集合,请实例化一个连接到Atlas集群的 MongoDB\Client 并将以下值分配给您的 $collection 变量
$collection = $client->sample_training->companies;
要了解如何创建免费的MongoDB Atlas集群并加载数据集,请参阅 Atlas 入门指南。
获取精确计数
使用MongoDB\Collection::countDocuments()方法来统计集合中的文档数量。要统计匹配特定搜索条件的文档数量,请将查询过滤器传递给countDocuments()方法。
要了解如何指定查询,请参阅指定查询指南。
统计所有文档
要返回集合中所有文档的计数,请将空查询过滤器数组传递给countDocuments()方法,如下例所示
$result = $collection->countDocuments([]); echo 'Number of documents: ', $result;
Number of documents: 9500
统计特定文档
要返回匹配特定搜索条件的文档数量,请将查询过滤器传递给 countDocuments() 方法。
以下示例计算 founded_year 字段值为 2010 的文档数量
$result = $collection->countDocuments(['founded_year' => 2010]); echo 'Number of companies founded in 2010: ', $result;
Number of companies founded in 2010: 33
自定义计数行为
您可以通过传递一个指定选项值的数组来修改 countDocuments() 方法的行为。以下表格描述了您可以设置的某些选项,以自定义计数操作
选项 | 描述 |
|---|---|
collation | 操作中使用的排序。 类型: array|object |
hint | 用于操作的索引。 类型: string|array|object |
comment | 要附加到操作的注释。 类型: 任何有效的BSON类型 |
limit | 要计数的最大文档数。此值必须是一个正整数。 类型: integer |
maxTimeMS | 操作可以运行的最大毫秒数。 类型: integer |
skip | 在计数文档之前要跳过的文档数。 类型: integer |
readPreference | 用于操作的读取偏好。有关更多信息,请参阅服务器手册中的 读取偏好。 类型: MongoDB\Driver\ReadPreference |
以下示例使用 countDocuments() 方法来计算具有 number_of_employees 字段值为 50 的文档数量,并指示操作计数最多 100 个结果
$result = $collection->countDocuments( ['number_of_employees' => 50], ['limit' => 100] ); echo 'Number of companies with 50 employees: ', $result;
Number of companies with 50 employees: 100
检索估算文档数量
您可以通过调用 MongoDB\Collection::estimatedDocumentCount() 方法来检索集合中文档数量的估算值。该方法根据集合元数据估算文档数量,可能比进行精确计数更快。
以下示例估计集合中文档的数量
$result = $collection->estimatedDocumentCount(); echo 'Estimated number of documents: ', $result;
Estimated number of documents: 9500
自定义估算数量行为
您可以通过传递一个指定选项值的数组作为参数来修改 estimatedDocumentCount() 方法的行为。以下表格描述了您可以在数组中设置的选项
选项 | 描述 |
|---|---|
comment | 要附加到操作的注释。 类型: 任何有效的BSON类型 |
maxTimeMS | 操作可以运行的最大毫秒数。 类型: integer |
readConcern | 用于操作的读取关注点。有关更多信息,请参阅服务器手册中的 读取关注点。 类型: MongoDB\Driver\ReadConcern |
readPreference | 用于操作的读取偏好。有关更多信息,请参阅服务器手册中的 读取偏好。 类型: MongoDB\Driver\ReadPreference |
session | 与操作关联的客户端会话。 类型: MongoDB\Driver\Session |
以下示例使用 estimatedDocumentCount() 方法返回集合中文档数量的估算值,并设置操作的超时时间为 1000 毫秒。
$result = $collection->estimatedDocumentCount(['maxTimeMS' => 1000]); echo 'Estimated number of documents: ', $result;
Estimated number of documents: 9500
API 文档
要了解更多关于本指南中讨论的任何方法或类型的信息,请参阅以下API文档