Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

db.collection.countDocuments()

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 行为
  • 示例

带驱动程序的 MongoDB

本页面提供 mongosh 方法的相关信息。要查看 MongoDB 驱动程序中的等效方法,请参阅编程语言的相应页面:

C#Java SyncNode.jsPyMongoCC++GoJava RSKotlin CoroutineKotlin SyncPHPMotorRustScalaSwift
db.collection.countDocuments(query, options)

返回一个整数,表示与集合或视图的查询匹配的文档数。 此方法可用于事务。

此方法可用于以下环境中托管的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

注意

所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令

countDocuments() 方法采用以下形式:

db.collection.countDocuments( <query>, <options> )

countDocuments() 方法使用以下参数:

Parameter
类型
说明
查询
文档
查询选择条件。要计算所有文档,请指定一个空文档。另请参阅查询限制。
选项
文档
可选。影响计数行为的额外选项。

options 文档可以包含:

字段
类型
说明
limit
整型
可选。要计数的最大文档数。
skip
整型
可选。计数前要跳过的文档。
hint
字符串或文档
可选。用于查询的索引名称或索引规范。
maxTimeMS
整型
可选。允许计数运行的最长时间。

db.collection.count() 不同,db.collection.countDocuments() 不使用元数据来返回该计数。而会执行文档聚合以返回准确的计数,在非正常关闭之后或分片集群中存在孤立文档的情况下亦是如此。

db.collection.countDocuments() 封装以下聚合操作并仅返回 n 值:

db.collection.aggregate([
{ $match: <query> },
{ $group: { _id: null, n: { $sum: 1 } } }
])

db.collection.countDocuments() 在空集合或不存在的集合或视图上返回 0

db.collection.countDocuments() 的查询表达式中不能使用以下查询操作符:

限制性操作符
替代方案
改用 $expr

作为替代方案,请改为使用包含 $center$geoWithin;即

{ $geoWithin: { $center: [ [ <x>, <y> ], <radius> ] } }

作为替代方案,请改为使用包含 $centerSphere$geoWithin;即

{ $geoWithin: { $centerSphere: [ [ <x>, <y> ], <radius> ] } }

db.collection.countDocuments() 可以在分布式事务中使用。

在事务中使用 db.collection.countDocuments() 时,生成的计数不会过滤任何未提交的多文档事务

重要

在大多数情况下,与单文档写入操作相比,分布式事务会产生更高的性能成本,并且分布式事务的可用性不应取代有效的模式设计。在许多情况下,非规范化数据模型(嵌入式文档和数组)仍然是数据和使用案例的最佳选择。换言之,对于许多场景,适当的数据建模将最大限度地减少对分布式事务的需求。

有关其他事务使用注意事项(如运行时间限制和 oplog 大小限制),另请参阅生产注意事项

从 MongoDB 4.2 开始,如果在操作完成之前,发出 db.collection.countDocuments() 的客户端断开连接,MongoDB 将使用killOpdb.collection.countDocuments() 标记为终止。

要计算 orders 集合中的文档数量,请使用以下操作:

db.orders.countDocuments( {}, { hint: "_id_"} )

注意

如果将 db.collection.countDocuments() 与空查询过滤器一起使用,MongoDB 将执行完全集合扫描,这可能会使效率低下。为了提高性能,此示例指定 hint() 来使用自动生成的 _id 索引。还可以使用查找所有文档(如 { "_id": { $gte: MinKey } } )的查询过滤器来使用索引对所有文档进行计数。

计算 orders 集合中字段 ord_dt 的值晚于 new Date('01/01/2012') 的文档数量:

db.orders.countDocuments( { ord_dt: { $gt: new Date('01/01/2012') } }, { limit: 100 } )

提示

另请参阅:

后退

db.collection.count