Docs 菜单

Docs 主页开发应用程序MongoDB Manual

db.collection.countDocuments()

在此页面上

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

重要

mongosh 方法

本页介绍了 mongosh方法。这不是数据库命令或特定语言驱动程序(例如 Node.js)的文档。

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

对于 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 } } }
])

从版本4开始。 2 。 1 、 db.collection.countDocuments()在空或不存在的集合或视图上返回0

在 MongoDB 的早期版本中,空的或不存在的集合或视图上出现db.collection.countDocuments()错误。

不能将以下查询运算符用作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 大小限制),另请参阅生产注意事项

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

要计算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()