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:具有以下字段:
count | ||
query | ||
limit | ||
skip | ||
hint | ||
readConcern |
| |
maxTimeMS |
| |
collation |
| |
comment |
|
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:$count阶段相当于以下$group+$project序列:
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 在使用Wired Tiger存储引擎对mongod using the Wired Tiger storage engine, count statistics reported by count may be inaccurate.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. 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客户端断开连接
If the client that issued 如果发出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",以读取已确认已写入大多数节点的数据的最新副本。
Important
To use the要使用readConcernlevel of"majority", you must specify a nonemptyquerycondition."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"写入关注。