对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

db. 集合.countDocuments()(mongosh方法)

带驱动程序的 MongoDB

本页面文档 mongosh 方法。要查看 MongoDB 驱动程序中的等效方法,请参阅您的编程语言的相应页面:
db.collection.countDocuments(query, options)

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

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

  • MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud

注意

This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.

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

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

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

Parameter
类型
说明

查询

文档

查询选择条件。要计算所有文档,请指定一个空文档。另请参阅查询限制。

选项

文档

可选。影响计数行为的额外选项。

options 文档可以包含:

字段
类型
说明

limit

整型

可选。要计数的最大文档数。

skip

整型

可选。计数前要跳过的文档。

hint

字符串或文档

可选。用于查询的索引名称或索引规范。

maxTimeMS

整型

可选。允许计数运行的最长时间。

与 db.collection.count() 不同,countDocuments() 不使用元数据来返回计数。相反,它会执行文档聚合以返回准确的计数,即使在非正常关闭之后或分片集群中存在孤立文档时也是如此。

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

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

countDocuments() 对空或不存在的集合或视图返回 0。

不能将以下查询运算符用作 countDocuments() 的查询表达式的一部分:

限制性操作符
替代方案

改用 $expr。

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

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

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

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

countDocuments() 可用于分布式事务。

当您在ACID 事务中使用 countDocuments() 时,生成的计数不会过滤掉任何未提交的多文档事务。

重要

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

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

如果发出 countDocuments() 的客户端在操作完成之前断开连接,则MongoDB使用killOp将 countDocuments() 标记为终止。

本页上的示例使用来自 sample_mflix 数据集的数据。有关如何将此数据集加载到您的自管理 MongoDB 部署中的详细信息,请参阅 加载示例数据集。如果您对示例数据库进行了任何修改,您可能需要删除并重新创建数据库,才能运行此页面上的示例。

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

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

注意

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

此示例计算 movies集合中 directors字段包含 "David Lynch" 的文档数量:

db.movies.countDocuments( { directors: "David Lynch" } )