Definition定义
countCounts 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 thecount()helper method.mongosh中,此命令也可以通过count()辅助方法运行。Helper methods are convenient for助手方法对mongoshusers, but they may not return the same level of information as database commands.mongosh用户来说很方便,但它们可能不会返回与数据库命令相同级别的信息。In cases where the convenience is not needed or the additional return fields are required, use the database command.如果不需要便利性或需要额外的返回字段,请使用database命令。Note
MongoDB drivers deprecate their respective cursor and collectionMongoDB驱动程序弃用各自的游标和集合count()APIs (which runs thecountcommand) in favor of new APIs that corresponds tocountDocuments()andestimatedDocumentCount().count()API(运行count命令),转而使用与countDocuments()和estimatedDocumentCount()相对应的新API。For the specific API names for a given driver, see the driver API documentation.有关给定驱动程序的特定API名称,请参阅驱动程序API文档。
Compatibility兼容性
This command is available in deployments hosted in the following environments:此命令在以下环境中托管的部署中可用:
- MongoDB Atlas
: The fully managed service for MongoDB deployments in the cloud:云中MongoDB部署的完全托管服务
Important
This command has limited support in M0 and Flex clusters. For more information, see Unsupported Commands.此命令在M0和Flex集群中的支持有限。有关详细信息,请参阅不支持的命令。
- 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语法
The command has the following syntax:该命令具有以下语法:
Note
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:具有以下字段:
| Type | ||
|---|---|---|
count | string | |
query | document | |
limit | integer | |
skip | integer | |
hint | string or document | |
readConcern | document |
For more formation on the read concern levels, see Read Concern Levels. |
maxTimeMS | non-negative integer | Optional. Specifies a time limit in milliseconds. If you do not specify a value for MongoDB terminates operations that exceed their allotted time limit using the same mechanism as |
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:
When specifying collation, the If the collation is unspecified but the collection has a default collation (see 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. 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. |
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). |
Stable API Support支持
countStarting in MongoDB 6.0, the 从MongoDB 6.0开始,count command is included in 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.
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 commands 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.关于基于集合元数据的计数,请参阅带有计数选项的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.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:
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.
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:
validateupdates the count statistic in thecollStatsoutput with the latest value.- Other statistics like the number of documents inserted or removed in the
collStatsoutput are estimates.
Note
This loss of accuracy only applies to count operations that do not include a query document.
Client Disconnection
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'):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:
{ "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."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.
Important
- To use the
readConcernlevel of"majority", you must specify a nonemptyquerycondition. - 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.