db.collection.count()

On this page本页内容

Definition定义

db.collection.count(query, options)

mongo Shell Method

This page documents the mongo shell method, and does not refer to the MongoDB Node.js driver (or any other driver) method. 本页记录了mongo shell方法,未提及MongoDB Node.js驱动程序(或任何其他驱动程序)方法。For corresponding MongoDB driver API, refer to your specific MongoDB driver documentation instead.有关相应的MongoDB驱动程序API,请参阅特定的MongoDB驱动程序文档。

Note

MongoDB drivers compatible with the 4.0 features deprecate their respective cursor and collection count() APIs in favor of new APIs for countDocuments() and estimatedDocumentCount(). 与4.0功能兼容的MongoDB驱动程序不支持各自的游标和集合count()API,而支持countDocuments()estimatedDocumentCount()的新API。For the specific API names for a given driver, see the driver documentation.有关给定驱动程序的特定API名称,请参阅驱动程序文档。

Returns the count of documents that would match a find() query for the collection or view. 返回与集合或视图的find()查询匹配的文档数。The db.collection.count() method does not perform the find() operation but instead counts and returns the number of results that match a query.db.collection.count()方法不执行find()操作,而是计算并返回与查询匹配的结果数。

Important

Parameter参数Type类型Description描述
query document The query selection criteria.查询选择条件。
options document Optional.可选。Extra options for modifying the count.修改计数的额外选项。

The options document contains the following fields:options文档包含以下字段:

Field字段Type类型Description描述
limit integer Optional.可选。The maximum number of documents to count.要计数的最大文档数。
skip integer Optional.可选。The number of documents to skip before counting.计数前要跳过的文档数。
hint string or document Optional.可选。An index name hint or specification for the query.查询的索引名提示或规范。
maxTimeMS integer Optional.可选。The maximum amount of time to allow the query to run.允许查询运行的最长时间。
readConcern string

Optional.可选。Specifies the read concern. 指定读取关注点The default level is "local".默认级别为"local"

To use read concern level of "majority", replica sets must use WiredTiger storage engine.要使用"majority"读关注级别,副本集必须使用WiredTiger存储引擎

You can disable read concern "majority" for a deployment with a three-member primary-secondary-arbiter (PSA) architecture; however, this has implications for change streams (in MongoDB 4.0 and earlier only) and transactions on sharded clusters. 对于具有三成员主从仲裁器(PSA)体系结构的部署,可以禁用读关注点"majority";然而,这对变更流(仅在MongoDB 4.0及更早版本中)和分片集群上的事务有影响。For more information, see Disable Read Concern Majority.有关更多信息,请参阅禁用读取关注多数

To ensure that a single thread can read its own writes, use "majority" read concern and "majority" write concern against the primary of the replica set.要确保单个线程可以读取自己的写入,请对副本集的主线程使用"majority"读取关注点和"majority"写入关注点。

To use a read concern level of "majority", you must specify a nonempty query condition.要使用"majority"读取关注级别,必须指定非空query条件。

New in version 3.2.版本3.2中的新功能。

collation document

Optional.可选。

Specifies the collation to use for the operation.指定要用于该操作的排序规则

Collation allows users to specify language-specific rules for string comparison, such as rules for lettercase and accent marks.排序规则允许用户为字符串比较指定特定于语言的规则,例如字母大小写和重音符号的规则。

The collation option has the following syntax:collation选项语法如下所示:

collation: {
   locale: <string>,
   caseLevel: <boolean>,
   caseFirst: <string>,
   strength: <int>,
   numericOrdering: <boolean>,
   alternate: <string>,
   maxVariable: <string>,
   backwards: <boolean>
}

When specifying collation, the locale field is mandatory; all other collation fields are optional. 指定排序规则时,locale字段是必需的;所有其他排序规则字段都是可选的。For descriptions of the fields, see Collation Document.有关这些字段的描述,请参阅排序规则文档。

If the collation is unspecified but the collection has a default collation (see db.createCollection()), the operation uses the collation specified for the collection.如果未指定排序规则,但集合具有默认排序规则(请参见db.createCollection()),则操作将使用为集合指定的排序规则。

If no collation is specified for the collection or for the operations, MongoDB uses the simple binary comparison used in prior versions for string comparisons.如果没有为集合或操作指定排序规则,MongoDB将使用以前版本中用于字符串比较的简单二进制比较。

You cannot specify multiple collations for an operation. 不能为一个操作指定多个排序规则。For example, you cannot specify different collations per field, or if performing a find with a sort, you cannot use one collation for the find and another for the sort.例如,不能为每个字段指定不同的排序规则,或者如果使用排序执行查找,则不能对查找使用一种排序规则,对排序使用另一种排序规则。

New in version 3.4.版本3.4中的新功能。

count() is equivalent to the db.collection.find(query).count() construct.相当于db.collection.find(query).count()构造。

Behavior行为

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. 您可以使用$count阶段对文档进行计数。For example, the following operation counts the documents in a collection:例如,以下操作对集合中的文档进行计数:

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

See also参阅

$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 mongod using the Wired Tiger storage engine, count statistics reported by count() may be inaccurate.在使用Wired Tiger存储引擎不干净地关闭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. 检查点通常每60秒出现一次。However, 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 the correct statistics after an unclean shutdown.mongod上的每个集合上运行validate,以在不干净的关闭后恢复正确的统计数据。

Note

This loss of accuracy only applies to count() operations that do not include a query predicate.这种精度损失仅适用于不包含查询谓词的count()操作。

Client Disconnection客户端断开

Starting in MongoDB 4.2, if the client that issued the db.collection.count() disconnects before the operation completes, MongoDB marks the db.collection.count() for termination (i.e. killOp on the operation).从MongoDB 4.2开始,如果发出db.collection.count()的客户端在操作完成之前断开连接,MongoDB会将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()