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描述
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.将索引名称指定为字符串或索引规范文档。
readConcerndocument

Optional. 可选。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. 对主和非分片的次映像的行为与"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.有关读取关注级别的更多信息,请参阅读取关注级别

collationdocument

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.如果未指定排序规则,但集合具有默认排序规则(请参见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.例如,不能为每个字段指定不同的排序规则,或者如果使用排序执行查找,则不能将一种排序规则用于查找,另一种用于排序。

commentany

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).注释可以是任何有效的BSON类型(字符串、整数、对象、数组等)。

New in version 4.4.在版本4.4中新增

mongosh also provides the following wrapper methods for count:还提供了以下count包装方法:

Important重要

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.有关详细信息,请参阅事务和计数操作

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.在分片集群上,如果存在孤立文档或正在进行块迁移,则在没有查询谓词的情况下运行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 } }
] )
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.在使用Wired Tiger存储引擎不干净地关闭了mongod之后,计数报告的计数统计数据可能不准确。

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 statistics after an unclean shutdown.mongod上的每个集合运行validate,以在不干净的关闭后恢复统计信息。

After an unclean shutdown:不清洁停机后:

Note注意

This loss of accuracy only applies to count operations that do not include a query document.这种准确性的损失仅适用于包括查询文档的count操作。

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).从MongoDB 4.2开始,如果发出count的客户端在操作完成之前断开连接,MongoDB将count标记为终止(即操作上的killOp)。

Examples示例

The following sections provide examples of the count command.以下部分提供了count命令的示例。

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:结果,表示计数的n26,命令状态ok1:

{ "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:结果,表示计数的n13,命令状态ok1:

{ "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:以下操作返回orders集合中ord_dt字段值大于Date('01/01/2012')的文档计数,并跳过前10个匹配的文档:

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:结果,表示计数的n3,命令状态ok1

{ "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":以下操作使用索引{ status: 1 }返回orders集合中的文档计数,其中ord_dt字段的值大于Date('01/01/2012')status字段等于"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.要覆盖"local"的默认读取关注级别,请使用readConcern选项。

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.以下对副本集的操作将读取关注点指定为"majority",以读取确认已写入大多数节点的数据的最新副本。

Important重要
  • To use the readConcern level of "majority", you must specify a nonempty query condition.要使用"majority"readConcern级别,必须指定非空query条件。
  • 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.为了确保单个线程可以读取自己的写入,请对副本集的主线程使用"majority"读取关注点和"majority"写入关注点。

←  aggregatedistinct →