Definition定义
db.collection.count(query, options)-
Important
mongosh
Method方法This page documents a本页记录了一种mongoshmethod. This is not the documentation for database commands or language-specific drivers, such as Node.js.mongosh方法。这不是数据库命令或特定语言驱动程序(如Node.js)的文档。For the database command, see the有关数据库命令,请参阅countcommand.count命令。For MongoDB API drivers, refer to the language-specific MongoDB driver documentation.有关MongoDB API驱动程序,请参阅特定语言的MongoDB驱动程序文档。Note
MongoDB drivers deprecate their respective cursor and collectionMongoDB驱动程序弃用了各自的游标和集合count()APIs in favor of new APIs forcountDocuments()andestimatedDocumentCount(). For the specific API names for a given driver, see the driver documentation.count()API,转而支持countDocuments()和estimatedDocumentCount()的新API。有关给定驱动程序的特定API名称,请参阅驱动程序文档。Returns the count of documents that would match a返回与集合或视图的find()query for the collection or view.find()查询匹配的文档数。Thedb.collection.count()method does not perform thefind()operation but instead counts and returns the number of results that match a query.db.collection.count()方法不执行find()操作,而是计数并返回与查询匹配的结果数量。
Compatibility兼容性
This method is available in deployments hosted in the following environments:此方法在以下环境中托管的部署中可用:
- MongoDB Atlas
: The fully managed service for MongoDB deployments in the cloud:云中MongoDB部署的完全托管服务
Note
This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.所有MongoDB Atlas集群都支持此命令。有关Atlas支持所有命令的信息,请参阅不支持的命令。
- MongoDB Enterprise
: The subscription-based, self-managed version of MongoDB:MongoDB的基于订阅的自我管理版本 - MongoDB Community
: The source-available, free-to-use, and self-managed version of MongoDB:MongoDB的源代码可用、免费使用和自我管理版本
Syntax语法
This method takes the following parameters:此方法采用以下参数:
query | ||
options |
The options document contains the following fields:options文档包含以下字段:
limit | ||
skip | ||
hint | ||
maxTimeMS | ||
readConcern |
| |
collation |
|
count() is equivalent to the 等效于db.collection.find(query).count() construct.db.collection.find(query).count()构造。
Behavior行为
Inaccurate Counts Without Query Predicate没有查询谓词的计数不准确
When you call 当您在没有查询谓词的情况下调用 count() without a query predicate, you may receive inaccurate document counts. Without a query predicate, count() methods return results based on the collection's metadata, which may result in an approximate count. In particular,count()时,您可能会收到不准确的文档计数。如果没有查询谓词, count()方法将根据集合的元数据返回结果,这可能会导致近似计数。特别地,
On a sharded cluster, the resulting count will not correctly filter out orphaned documents.在分片集群上,产生的计数将无法正确筛选掉孤立的文档。After an unclean shutdown or file copy based initial sync, the count may be incorrect.在不干净的关机或基于文件副本的初始同步后,计数可能不正确。
For counts based on collection metadata, see also collStats pipeline stage with the count option.关于基于集合元数据的计数,请参阅带有count选项的collStats管道阶段。
Count and Transactions计数和事务
You cannot use 您不能在事务中使用count and shell helpers count() and db.collection.count() in transactions.count和shell助手count()和db.collection.count()。
For details, see Transactions and Count Operations.有关详细信息,请参阅事务和计数操作。
Sharded Clusters分片集群
On a sharded cluster, 在分片集群上,如果存在孤立文档或正在进行块迁移,则没有查询谓词的db.collection.count() without a query predicate can result in an inaccurate count if orphaned documents exist or if a chunk migration is in progress.db.collection.count()可能会导致计数不准确。
To avoid these situations, on a sharded cluster, use the 为了避免这些情况,在分片集群上,使用db.collection.aggregate() method:db.collection.aggregate()方法:
You can use the 您可以使用$count stage to count the documents. For example, the following operation counts the documents in a collection:$count阶段对文档进行计数。例如,以下操作对集合中的文档进行计数:
db.collection.aggregate( [
{ $count: "myCount" }
])
The $count stage is equivalent to the following $group + $project sequence:$count阶段相当于以下$group+$project序列:
db.collection.aggregate( [
{ $group: { _id: null, count: { $sum: 1 } } },
{ $project: { _id: 0 } }
] )
Tip
$collStats to return an approximate count based on the collection's metadata.根据集合的元数据返回近似计数。
Index Use索引使用
Consider a collection with the following index:考虑一个具有以下索引的集合:
{ a: 1, b: 1 }
When performing a count, MongoDB can return the count using only the index if:在执行计数时,MongoDB可以在以下情况下仅使用索引返回计数:
the query can use an index,查询可以使用索引,the query only contains conditions on the keys of the index, and查询仅包含索引键的条件,以及the query predicates access a single contiguous range of index keys.查询谓词访问单个连续的索引键范围。
For example, the following operations can return the count using only the index:例如,以下操作可以仅使用索引返回计数:
db.collection.find( { a: 5, b: 5 } ).count()
db.collection.find( { a: { $gt: 5 } } ).count()
db.collection.find( { a: 5, b: { $gt: 10 } } ).count()
If, however, the query can use an index but the query predicates do not access a single contiguous range of index keys or the query also contains conditions on fields outside the index, then in addition to using the index, MongoDB must also read the documents to return the count.但是,如果查询可以使用索引,但查询谓词不能访问单个连续的索引键范围,或者查询还包含索引外字段的条件,那么除了使用索引外,MongoDB还必须读取文档以返回计数。
db.collection.find( { a: 5, b: { $in: [ 1, 2, 3 ] } } ).count()
db.collection.find( { a: { $gt: 5 }, b: 5 } ).count()
db.collection.find( { a: 5, b: 5, c: 5 } ).count()
In such cases, during the initial read of the documents, MongoDB pages the documents into memory such that subsequent calls of the same count operation will have better performance.在这种情况下,在文档的初始读取过程中,MongoDB会将文档分页到内存中,这样后续对相同计数操作的调用将具有更好的性能。
Accuracy after Unexpected Shutdown意外停机后的准确性
After an unclean shutdown of a 使用Wired Tiger存储引擎不干净地关闭mongod using the Wired Tiger storage engine, count statistics reported by count() may be inaccurate.mongod后,count()报告的计数统计数据可能不准确。
The amount of drift depends on the number of insert, update, or delete operations performed between the last checkpoint and the unclean shutdown. 漂移量取决于在最后一个检查点和不干净关闭之间执行的插入、更新或删除操作的数量。Checkpoints usually occur every 60 seconds. However, 检查点通常每60秒出现一次。然而,使用非默认的mongod instances running with non-default --syncdelay settings may have more or less frequent checkpoints.--syncdelay设置运行的mongod实例可能或多或少地具有检查点。
Run 在validate on each collection on the mongod to restore statistics after an unclean shutdown.mongod上的每个集合上运行validate,以在不干净关闭后恢复统计数据。
After an unclean shutdown:不干净停机后:
Client Disconnection客户端断开连接
If the client that issued 如果发出db.collection.count() disconnects before the operation completes, MongoDB marks db.collection.count() for termination using killOp.db.collection.count()的客户端在操作完成之前断开连接,MongoDB将使用killOp标记db.collection.count()以终止。
Examples示例
Count all Documents in a Collection统计集合中的所有文档
To count the number of all documents in the 要统计orders collection, use the following operation:orders集合中所有文档的数量,请使用以下操作:
db.orders.count()
This operation is equivalent to the following:此操作相当于以下操作:
db.orders.find().count()Count all Documents that Match a Query统计与查询匹配的所有文档
Count the number of the documents in the 统计orders collection with the field ord_dt greater than new Date('01/01/2012'):orders集合中字段ord_dt大于new Date('01/01/2012')的文档数量:
db.orders.count( { ord_dt: { $gt: new Date('01/01/2012') } } )
The query is equivalent to the following:该查询等效于以下内容:
db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).count()