db.collection.count()
Definition
mongo
Shell Method
This page documents the mongo
shell method, and doesnot refer to the MongoDB Node.js driver (or any other driver)method. For corresponding MongoDB driver API, refer to your specificMongoDB driver documentation instead.
Note
MongoDB drivers compatible with the 4.0 features deprecate theirrespective cursor and collection count()
APIs in favor of newAPIs for countDocuments()
and estimatedDocumentCount()
.For the specific API names for a given driver, see the driverdocumentation.
Returns the count of documents that would match afind()
query for the collection or view. Thedb.collection.count()
method does not perform thefind()
operation but instead counts andreturns the number of results that match a query.
Important
- Avoid using the
db.collection.count()
method withouta query predicate since without the query predicate, the methodreturns results based on the collection’s metadata, which mayresult in an approximate count. In particular,- On a sharded cluster, the resulting count will not correctlyfilter out orphaned documents.
- After an unclean shutdown, the count may beincorrect.
- For counts based on collection metadata, see alsocollStats pipeline stage with the countoption.
ParameterTypeDescriptionquery
documentThe query selection criteria.options
documentOptional. Extra options for modifying the count.
The options
document contains the following fields:
FieldTypeDescriptionlimit
integerOptional. The maximum number of documents to count.skip
integerOptional. The number of documents to skip before counting.hint
string or documentOptional. An index name hint or specification for the query.
New in version 2.6.
maxTimeMS
integerOptional. The maximum amount of time to allow the query to run.readConcern
stringOptional. Specifies the read concern. The default level is"local"
.
To use read concern level of "majority"
, replicasets must use WiredTiger storage engine.
You can disable read concern "majority"
for a deploymentwith a three-member primary-secondary-arbiter (PSA) architecture;however, this has implications for change streams (in MongoDB 4.0 andearlier only) and transactions on sharded clusters. 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 mustspecify a nonempty query
condition.
New in version 3.2.
collation
documentOptional.
Specifies the collation to use for the operation.
Collation allows users to specifylanguage-specific rules for string comparison, such as rules forlettercase and accent marks.
The collation option has the following syntax:
- 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; allother collation fields are optional. For descriptions of the fields,see Collation Document.
If the collation is unspecified but the collection has adefault collation (see db.createCollection()
), theoperation uses the collation specified for the collection.
If no collation is specified for the collection or for theoperations, MongoDB uses the simple binary comparison used in priorversions for string comparisons.
You cannot specify multiple collations for an operation. Forexample, you cannot specify different collations per field, or ifperforming a find with a sort, you cannot use one collation for thefind and another for the sort.
New in version 3.4.
count()
is equivalent to thedb.collection.find(query).count()
construct.
See also
Behavior
Count and Transactions
You cannot use count
and shell helperscount()
and db.collection.count()
intransactions.
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 iforphaned documents exist or if achunk migration is in progress.
To avoid these situations, on a sharded cluster, use thedb.collection.aggregate()
method:
You can use the $count
stage to count the documents. Forexample, 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.
Index Use
Consider a collection with the following index:
- { a: 1, b: 1 }
When performing a count, MongoDB can return the count using only theindex 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 onlythe 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 notaccess a single contiguous range of index keys or the query alsocontains conditions on fields outside the index, then in addition tousing the index, MongoDB must also read the documents to return thecount.
- 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 pagesthe documents into memory such that subsequent calls of the same countoperation will have better performance.
Accuracy after Unexpected Shutdown
After an unclean shutdown of a mongod
using the Wired Tiger storage engine, count statistics reported bycount()
may be inaccurate.
The amount of drift depends on the number of insert, update, or deleteoperations performed between the last checkpoint and the unclean shutdown. Checkpointsusually occur every 60 seconds. However, mongod
instances runningwith non-default —syncdelay
settings may have more or less frequentcheckpoints.
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.
Client Disconnection
Starting in MongoDB 4.2, if the client that issued the db.collection.count()
disconnects before the operation completes, MongoDB marksthe db.collection.count()
for termination (i.e. killOp
on theoperation).
Examples
Count all Documents in a Collection
To count the number of all documents in the orders
collection, usethe 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 newDate('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()