count

On this page本页内容

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.返回包含此计数和命令状态的文档。

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(). 与4.0功能兼容的MongoDB驱动程序不支持各自的游标和集合 count()API(运行count命令),而支持与countDocuments()estimatedDocumentCount()相对应的新API。For the specific API names for a given driver, see the driver API documentation.有关给定驱动程序的特定API名称,请参阅驱动程序API文档。

count has the following form:具有以下形式:

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.如果指定未知的选项名称,则该命令现在会出错。

{
  count: <collection or view>,
  query: <document>,
  limit: <integer>,
  skip: <integer>,
  hint: <hint>,
  readConcern: <document>,
  collation: <document>,
  comment: <any>
}

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

Field字段Type类型Description描述
count string The name of the collection or view to count.要计数的集合或视图的名称。
query document Optional.可选。A query that selects which documents to count in the collection or view.选择要在集合或视图中计数的文档的查询。
limit integer Optional.可选。The maximum number of matching documents to return.要返回的匹配文档的最大数量。
skip integer Optional.可选。The number of matching documents to skip before returning results.返回结果之前要跳过的匹配文档数。
hint string or document Optional.可选。The index to use. 要使用的索引。Specify either the index name as a string or the index specification document.将索引名称指定为字符串或索引规范文档。
readConcern document

Optional.可选。Specifies the read concern. 指定读取关注点The option has the following syntax:选项语法如下所示:

readConcern: { level: <value> }

Possible read concern levels are:可能的阅读关注级别包括:

For more formation on the read concern levels, see Read Concern Levels.

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: {
   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.

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中的新功能。

comment any

Optional.可选。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.版本4.4中的新功能。

The mongo shell also provides the following wrapper methods for count:

Important

Behavior行为

Count and Transactions盘点和交易

You cannot use count and shell helpers count() and db.collection.count() in transactions.

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:为了避免这些情况,在分片集群上,使用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:

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.

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 the correct statistics 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 the count disconnects before the operation completes, MongoDB marks the count for termination (i.e. killOp on the operation).

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:以下操作统计orders集合中所有文档的数量:

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'):以下操作返回orders集合中ord_dt字段的值大于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:结果中,代表计数的n1,命令状态ok1

{ "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 read concern level of "majority", replica sets must use WiredTiger storage engine.

    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. For more information, see Disable Read Concern Majority.

  • 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.