Docs HomeMongoDB Manual

count

Definition定义

count

Counts the number of documents in a collection or a view. Returns a document that contains this count and as well as the command status.统计集合或视图中的文档数。返回包含此计数以及命令状态的文档。

Tip

In mongosh, this command can also be run through the count() helper method.mongosh中,这个命令也可以通过count()辅助方法运行。

Helper methods are convenient for mongosh users, but they may not return the same level of information as database commands. In cases where the convenience is not needed or the additional return fields are required, use the database command.Helper方法对mongosh用户来说很方便,但它们可能不会返回与数据库命令相同级别的信息。如果不需要方便,或者需要额外的返回字段,请使用数据库命令。

Note

MongoDB drivers compatible with the 4.0 features deprecate their respective cursor and collection count() APIs (which runs the count command) in favor of new APIs that corresponds to countDocuments() and estimatedDocumentCount(). For the specific API names for a given driver, see the driver API documentation.与4.0功能兼容的MongoDB驱动程序摒弃了各自的游标和集合count()API(运行count命令),转而使用与countDocuments()estimatedDocumentCount()相对应的新API。有关给定驱动程序的特定API名称,请参阅驱动程序API文档。

Syntax语法

The command has the following syntax:该命令具有以下语法:

Note

Starting in version 4.2, MongoDB implements a stricter validation of the option names for the count command. 从4.2版本开始,MongoDB对count命令的选项名称进行了更严格的验证。The command now errors if you specify an unknown option name.如果指定了未知的选项名称,该命令现在将出错。

db.runCommand(
{
count: <collection or view>,
query: <document>,
limit: <integer>,
skip: <integer>,
hint: <hint>,
readConcern: <document>,
maxTimeMS: <integer>,
collation: <document>,
comment: <any>
}
)

Command Fields命令字段

count has the following fields:具有以下字段:

Field字段Type类型Description描述
countstringThe name of the collection or view to count.要计数的集合或视图的名称。
querydocumentOptional.可选的。A query that selects which documents to count in the collection or view.选择要在集合或视图中计数的文档的查询。
limitintegerOptional.可选的。The maximum number of matching documents to return.要返回的匹配文档的最大数目。
skipintegerOptional.可选的。The number of matching documents to skip before returning results.返回结果之前要跳过的匹配文档数。
hintstring or documentOptional.可选的。The index to use. 要使用的索引。Specify either the index name as a string or the index specification document.将索引名称指定为字符串或索引规范文档。
readConcerndocumentOptional.可选的。Specifies the read concern. The option has the following syntax:指定读取关注。该选项具有以下语法:
readConcern: { level: <value> }

Possible read concern levels are:可能的读取关注级别为:

  • "local". This is the default read concern level for read operations against the primary and secondaries.这是针对主和辅助的读取操作的默认读取关注级别。

  • "available". Available for read operations against the primary and secondaries. 可用于对主和辅助进行读取操作。"available" behaves the same as "local" against the primary and non-sharded secondaries. 对于主和非分片的辅助,"available"的行为与"local"的行为相同。The query returns the instance's most recent data.查询返回实例的最新数据。

  • "majority". Available for replica sets that use WiredTiger storage engine.适用于使用WiredTiger存储引擎的复制副本集。

  • "linearizable". Available for read operations on the primary only.仅可用于primary上的读取操作。

For more formation on the read concern levels, see Read Concern Levels.有关读取关注级别的更多信息,请参阅读取关注级别

maxTimeMSnon-negative integerOptional.可选的。
Specifies a time limit in milliseconds. 指定以毫秒为单位的时间限制。If you do not specify a value for maxTimeMS, operations will not time out. 如果不指定maxTimeMS的值,操作将不会超时。A value of 0 explicitly specifies the default unbounded behavior.0显式指定默认的无边界行为。
MongoDB terminates operations that exceed their allotted time limit using the same mechanism as db.killOp(). MongoDB使用与db.killOp()相同的机制终止超过指定时间限制的操作。MongoDB only terminates an operation at one of its designated interrupt points. MongoDB只在其指定的中断点之一终止操作。
collationdocumentOptional.可选的。
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: {
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.例如,不能为每个字段指定不同的排序规则,或者如果使用排序执行查找,则不能为查找使用一个排序规则,为排序使用另一个排序顺序。

commentanyOptional.可选的。
A user-provided comment to attach to this command. Once set, this comment appears alongside records of this command in the following locations:要附加到此命令的用户提供的注释。设置后,此注释将与此命令的记录一起显示在以下位置: A comment can be any valid BSON type (string, integer, object, array, etc).
New in version 4.4. 注释可以是任何有效的BSON类型(字符串、整数、对象、数组等)。4.4版新增

Stable API Support

Starting in MongoDB 6.0, the count command is included in Stable API V1. 从MongoDB 6.0开始,count命令包含在Stable API V1中。To use the count command in the Stable API, you must connect your driver to a deployment that is running MongoDB 6.0 or greater.要在Stable API中使用count命令,必须将驱动程序连接到运行MongoDB 6.0或更高版本的部署。

Behavior行为

Inaccurate Counts Without Query Predicate没有查询谓词的计数不准确

When you call count without a query predicate, you may receive inaccurate document counts. 如果在没有查询谓词的情况下调用count,则可能会收到不准确的文档计数。Without a query predicate, count commands return results based on the collection's metadata, which may result in an approximate count. 如果没有查询谓词,count命令将根据集合的元数据返回结果,这可能导致近似计数。In particular,特别地,

For counts based on collection metadata, see also collStats pipeline stage with the count option.有关基于集合元数据的计数,请参阅带有count选项的collStats管道阶段

Count and Transactions计数和事务

When you use count in a transaction, the resulting count will not filter out any uncommitted multi-document transactions.在事务中使用count时,生成的计数不会筛选掉任何未提交的多文档事务

For details, see Transactions and Count Operations.有关详细信息,请参阅事务和计数操作

Accuracy and Sharded Clusters准确性和分片群集

On a sharded cluster, the count command when run without a query predicate can result in an inaccurate count if orphaned documents exist or if a chunk migration is in progress.

To avoid these situations, on a sharded cluster, use the db.collection.aggregate() method:

You can use the $count stage to count the documents. 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:

db.collection.aggregate( [
{ $group: { _id: null, count: { $sum: 1 } } }
{ $project: { _id: 0 } }
] )
Tip

See also: 另请参阅:

$collStats to return an approximate count based on the collection's metadata.

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.

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, mongod instances running with non-default --syncdelay settings may have more or less frequent checkpoints.

Run validate on each collection on the mongod to restore statistics after an unclean shutdown.

After an unclean shutdown:

Note

This loss of accuracy only applies to count operations that do not include a query document.

Client Disconnection

Starting in MongoDB 4.2, if the client that issued count disconnects before the operation completes, MongoDB marks count for termination using killOp.

Examples实例

The following sections provide examples of the count command.

Count All Documents

The following operation counts the number of all documents in the orders collection:

db.runCommand( { count: 'orders' } )

In the result, the n, which represents the count, is 26, and the command status ok is 1:

{ "n" : 26, "ok" : 1 }

Count Documents That Match a Query

The following operation returns a count of the documents in the orders collection where the value of the ord_dt field is greater than Date('01/01/2012'):

db.runCommand( { count:'orders',
query: { ord_dt: { $gt: new Date('01/01/2012') } }
} )

In the result, the n, which represents the count, is 13 and the command status ok is 1:

{ "n" : 13, "ok" : 1 }

Skip Documents in Count

The following operation returns a count of the documents in the orders collection where the value of the ord_dt field is greater than Date('01/01/2012') and skip the first 10 matching documents:

db.runCommand( { count:'orders',
query: { ord_dt: { $gt: new Date('01/01/2012') } },
skip: 10 } )

In the result, the n, which represents the count, is 3 and the command status ok is 1:

{ "n" : 3, "ok" : 1 }

Specify the Index to Use

The following operation uses the index { status: 1 } to return a count of the documents in the orders collection where the value of the ord_dt field is greater than Date('01/01/2012') and the status field is equal to "D":

db.runCommand(
{
count:'orders',
query: {
ord_dt: { $gt: new Date('01/01/2012') },
status: "D"
},
hint: { status: 1 }
}
)

In the result, the n, which represents the count, is 1 and the command status ok is 1:

{ "n" : 1, "ok" : 1 }

Override Default Read Concern

To override the default read concern level of "local", use the readConcern option.

The following operation on a replica set specifies a Read Concern of "majority" to read the most recent copy of the data confirmed as having been written to a majority of the nodes.

Important
  • To use the readConcern level of "majority", you must specify a nonempty query condition.

  • Regardless of the read concern level, the most recent data on a node may not reflect the most recent version of the data in the system.

db.runCommand(
{
count: "restaurants",
query: { rating: { $gte: 4 } },
readConcern: { level: "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.