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方法对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.mongosh
用户来说很方便,但它们可能不会返回与数据库命令相同级别的信息。如果不需要方便,或者需要额外的返回字段,请使用数据库命令。NoteMongoDB drivers compatible with the 4.0 features deprecate their respective cursor and collection与4.0功能兼容的MongoDB驱动程序摒弃了各自的游标和集合count()
APIs (which runs thecount
command) 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:
-
validate
updates the count statistic in thecollStats
output with the latest value. -
Other statistics like the number of documents inserted or removed in the
collStats
output 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
readConcern
level of"majority"
, you must specify a nonemptyquery
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.