“文档” 菜单
文档首页
/
MongoDB Manual
/ / /

db.collection.countDocuments()

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 行为
  • 举例
db.collection.countDocuments(query, options)

重要

mongosh 方法

本页面提供 mongosh 方法的相关信息。这不是数据库命令或特定语言驱动程序(例如 Node.js)的相关文档。

有关数据库命令,请参阅$group 命令调用的$sum aggregate聚合阶段和 表达式。

如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。

对于传统 mongo Shell 文档,请参阅相应 MongoDB Server 版本的文档:

mongo shell v4.4

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

可以使用 db.collection.countDocuments() 查找托管在以下环境中的部署:

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

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

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

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

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

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()