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 for助手方法对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()
.count()
API(运行count
命令),转而使用与countDocuments()
和estimatedDocumentCount()
相对应的新API。For the specific API names for a given driver, see the driver API documentation.有关给定驱动程序的特定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. A value of 0 explicitly specifies the default unbounded behavior.maxTimeMS 的值,操作将不会超时。值0显式指定默认的无边界行为。db.killOp() . MongoDB only terminates an operation at one of its designated interrupt points. db.killOp() 相同的机制终止超过指定时间限制的操作。MongoDB只在其指定的中断点之一终止操作。 |
collation | document | collation collation 选项具有以下语法:collation: { locale field is mandatory; all other collation fields are optional. locale 字段是必需的;所有其他排序规则字段都是可选的。db.createCollection() ), the operation uses the collation specified for the collection.db.createCollection() ),则操作将使用为集合指定的排序规则。 |
comment | any |
|
Stable API Support稳定的API支持
Starting 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.count
命令包含在Stable API V1中。要在Stable API中使用count命令,必须将驱动程序连接到运行MongoDB 6.0或更高版本的部署。
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.有关基于集合元数据的计数,请参阅带有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.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:$count
阶段相当于以下$group
+$project
序列:
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 在使用Wired Tiger存储引擎不干净地关闭mongod
using the Wired Tiger storage engine, count statistics reported by count
may be inaccurate.mongod
之后,count
报告的计数统计数据可能不准确。
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, 检查点通常每60秒出现一次。然而,使用非默认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:非干净关闭之后:
Client Disconnection客户端断开连接
Starting in MongoDB 4.2, if the client that issued 从MongoDB 4.2开始,如果在操作完成之前发出count
disconnects before the operation completes, MongoDB marks count
for termination using killOp
.count
的客户端断开连接,MongoDB会使用killOp
标记count
终止。
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
:n
为26
,命令状态ok
为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: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
:n
为3
,命令状态ok
为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"
:{ 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
:n
为1
,命令状态ok
为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."majority"
读取关注,以读取已确认写入大多数节点的数据的最新副本。
To use the若要使用readConcern
level of"majority"
, you must specify a nonemptyquery
condition."majority"
的readConcern
级别,必须指定一个非空查询条件。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"
写入关注。