db.collection.count()
On this page本页内容
Definition定义
db.collection.count(query, options)
- Important
mongosh Method
This page documents a
mongosh
method. This is not the documentation for database commands or language-specific drivers, such as Node.js.For the database command, see the
count
command.For MongoDB API drivers, refer to the language-specific MongoDB driver documentation.
For the legacy
mongo
shell documentation, refer to the documentation for the corresponding MongoDB Server release:NoteMongoDB drivers compatible with the 4.0 features deprecate their respective cursor and collection与4.0功能兼容的MongoDB驱动程序摒弃了各自的游标和集合count()
APIs in favor of new APIs forcountDocuments()
andestimatedDocumentCount()
. For the specific API names for a given driver, see the driver documentation.count()
API,转而支持countDocuments()
和estimatedDocumentCount()
的新API。有关给定驱动程序的特定API名称,请参阅驱动程序文档。Returns the count of documents that would match a返回与集合或视图的find()
query for the collection or view.find()
查询匹配的文档数。Thedb.collection.count()
method does not perform thefind()
operation but instead counts and returns the number of results that match a query.db.collection.count()
方法不执行find()
操作,而是计算并返回与查询匹配的结果数。Parameter参数Type类型Description描述query
document The query selection criteria.查询选择条件。options
document Optional.可选的。Extra options for modifying the count.用于修改计数的额外选项。Theoptions
document contains the following fields:options
文档包含以下字段:Field字段Type类型Description描述limit
integer Optional.可选的。The maximum number of documents to count.要计数的最大文档数。skip
integer Optional.可选的。The number of documents to skip before counting.计数前要跳过的文档数。hint
string or document Optional.可选的。An index name hint or specification for the query.查询的索引名称提示或规范。maxTimeMS
integer Optional.可选的。The maximum amount of time to allow the query to run.允许运行查询的最长时间。readConcern
string Optional.可选的。Specifies the read concern. The default level is指定读取关注。默认级别为"local"
."local"
。
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"
写入关注。
To use a read concern level of若要使用"majority"
, you must specify a nonemptyquery
condition."majority"
的读取关注级别,必须指定一个非空query
条件。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.Collation
允许用户为字符串比较指定特定于语言的规则,例如大小写和重音标记的规则。
The collation option has the following syntax:collation
选项具有以下语法:collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}When specifying collation, the指定排序规则时,locale
field is mandatory; all other collation fields are optional.locale
字段是必需的;所有其他排序规则字段都是可选的。For descriptions of the fields, see Collation Document.有关字段的说明,请参阅排序规则文档。
If the collation is unspecified but the collection has a default collation (see如果未指定排序规则,但集合具有默认排序规则(请参见db.createCollection()
), the operation uses the collation specified for the collection.db.createCollection()
),则操作将使用为集合指定的排序规则。
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.如果没有为集合或操作指定排序规则,MongoDB将使用以前版本中使用的简单二进制比较进行字符串比较。
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.不能为一个操作指定多个排序规则。例如,不能为每个字段指定不同的排序规则,或者如果使用排序执行查找,则不能为查找使用一个排序规则,为排序使用另一个排序顺序。count()
is equivalent to the相当于db.collection.find(query).count()
construct.db.collection.find(query).count()
构造。
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()
methods return results based on the collection's metadata, which may result in an approximate count. In particular,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计数和事务
You cannot use 不能在事务中使用count
and shell helpers count()
and db.collection.count()
in transactions.count
和shell助手count()
以及db.collection.count()
。
For details, see Transactions and Count Operations.有关详细信息,请参阅事务和计数操作。
Sharded Clusters分片集群
On a sharded cluster, 在分片集群上,如果存在孤立文档或正在进行块迁移,则没有查询谓词的db.collection.count()
without a query predicate can result in an inaccurate count if orphaned documents exist or if a chunk migration is in progress.db.collection.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.用来返回基于集合元数据的近似计数。
Index Use索引使用
Consider a collection with the following index:考虑具有以下索引的集合:
{ a: 1, b: 1 }
When performing a count, MongoDB can return the count using only the index if:在执行计数时,MongoDB可以仅使用索引返回计数,如果:
the query can use an index,查询可以使用索引,the query only contains conditions on the keys of the index, and查询仅包含索引键上的条件,并且the query predicates access a single contiguous range of index keys.查询谓词访问单个连续范围的索引键。
For example, the following operations can return the count using only the index:例如,以下操作可以仅使用索引返回计数:
db.collection.find( { a: 5, b: 5 } ).count()
db.collection.find( { a: { $gt: 5 } } ).count()
db.collection.find( { a: 5, b: { $gt: 10 } } ).count()
If, however, the query can use an index but the query predicates do not access a single contiguous range of index keys or the query also contains conditions on fields outside the index, then in addition to using the index, MongoDB must also read the documents to return the count.但是,如果查询可以使用索引,但查询谓词不访问单个连续范围的索引键,或者查询还包含索引外字段的条件,那么除了使用索引之外,MongoDB还必须读取文档以返回计数。
db.collection.find( { a: 5, b: { $in: [ 1, 2, 3 ] } } ).count()
db.collection.find( { a: { $gt: 5 }, b: 5 } ).count()
db.collection.find( { a: 5, b: 5, c: 5 } ).count()
In such cases, during the initial read of the documents, MongoDB pages the documents into memory such that subsequent calls of the same count operation will have better performance.在这种情况下,在最初读取文档的过程中,MongoDB会将文档分页到内存中,这样同一计数操作的后续调用将具有更好的性能。
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. 检查点通常每60秒出现一次。However, 然而,使用非默认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开始,如果发出db.collection.count()
disconnects before the operation completes, MongoDB marks db.collection.count()
for termination using killOp
.db.collection.count()
的客户端在操作完成之前断开连接,MongoDB会使用killOp
标记db.collection.count()
终止。
Examples实例
Count all Documents in a Collection统计集合中的所有文档
To count the number of all documents in the 要计算orders
collection, use the following operation:orders
集合中所有文档的数量,请使用以下操作:
db.orders.count()
This operation is equivalent to the following:此操作等效于以下操作:
db.orders.find().count()
Count all Documents that Match a Query统计与查询匹配的所有文档
Count the number of the documents in the 统计orders
collection with the field ord_dt
greater than new Date('01/01/2012')
:orders
集合中字段ord_dt
大于new Date('01/01/2012')
的文档数:
db.orders.count( { ord_dt: { $gt: new Date('01/01/2012') } } )
The query is equivalent to the following:该查询等效于以下内容:
db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).count()