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.统计集合或视图中的文档数。返回包含此计数以及命令状态的文档。TipIn在mongosh, this command can also be run through thecount()helper method.mongosh中,这个命令也可以通过count()辅助方法运行。Helper methods are convenient forHelper方法对mongoshusers, 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.mongosh用户来说很方便,但它们可能不会返回与数据库命令相同级别的信息。如果不需要方便,或者需要额外的返回字段,请使用数据库命令。NoteMongoDB drivers compatible with the 4.0 features deprecate their respective cursor and collection与4.0功能兼容的MongoDB驱动程序摒弃了各自的游标和集合count()APIs (which runs thecountcommand) in favor of new APIs that corresponds tocountDocuments()andestimatedDocumentCount(). For the specific API names for a given driver, see the driver API documentation.count()API(运行count命令),转而使用与countDocuments()和estimatedDocumentCount()相对应的新API。有关给定驱动程序的特定API名称,请参阅驱动程序API文档。
Syntax语法
The command has the following syntax:该命令具有以下语法:
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:具有以下字段:
count | string | |
query | document | |
limit | integer | |
skip | integer | |
hint | string or document | |
readConcern | document | readConcern: { level: <value> }
|
maxTimeMS | non-negative integer | maxTimeMS, operations will not time out. maxTimeMS的值,操作将不会超时。0 explicitly specifies the default unbounded behavior.0显式指定默认的无边界行为。db.killOp(). db.killOp()相同的机制终止超过指定时间限制的操作。 |
collation | document | collation: {
|
comment | any |
New in version 4.4. 注释可以是任何有效的BSON类型(字符串、整数、对象、数组等)。4.4版新增。 |
Stable API Support
Starting in MongoDB 6.0, the 从MongoDB 6.0开始,count command is included in Stable API V1. count命令包含在Stable API V1中。To use the 要在Stable API中使用count command in the Stable API, you must connect your driver to a deployment that is running MongoDB 6.0 or greater.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,特别地,
-
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.有关基于集合元数据的计数,请参阅带有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 } }
] )
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:
-
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.
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.
-
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.