On this page
db.collection.count()
On this page
Definition
db.collection.count( query, options )-
Returns the count of documents that would match a
find()query for the collection or view. Thedb.collection.count()method does not perform thefind()operation but instead counts and returns the number of results that match a query.Parameter Type Description querydocument The query selection criteria. optionsdocument Optional. Extra options for modifying the count. The
optionsdocument contains the following fields:Field Type Description limitinteger Optional. The maximum number of documents to count. skipinteger Optional. The number of documents to skip before counting. hintstring or document Optional. An index name hint or specification for the query.
New in version 2.6.
maxTimeMSinteger Optional. The maximum amount of time to allow the query to run. readConcernstring Optional. Specifies the read concern. The default level is
"local".To use read concern level of
"majority", replica sets must use WiredTiger storage engine and electionprotocol version 1.Starting in MongoDB 3.6, support for read concern
"majority"is enabled by default. For MongoDB 3.6.1 - 3.6.x, you can disable read concern"majority". For more information, see Disable Read Concern 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.To use a read concern level of
"majority", you must specify a nonemptyquerycondition.New in version 3.2.
count()is equivalent to thedb.collection.find(query).count()construct.
See also
Behavior
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:
- 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.
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.
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 the correct statistics after an unclean shutdown.
Note
This loss of accuracy only applies to count() operations that do not include a query predicate.
Examples
Count all Documents in a Collection
To count the number of all documents in the orders collection, use the following operation:
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'):
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()