Navigation

db.collection.countDocuments()

Definition

db.collection.countDocuments(query, options)

New in version 4.0.3.

Returns the count of documents that match the query for a collection or view. The method wraps the $group aggregation stage with a $sum expression to perform the count and is available for use in Transactions.

db.collection.countDocuments( <query>, <options> )
Parameter Type Description
query document The query selection criteria. To count all documents, specify an empty document. See also Query Restrictions.
options document Optional. Extra options that affects the count behavior.

The options document can contain the following:

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 or the index specification to use for the query.
maxTimeMS integer Optional. The maximum amount of time to allow the count to run.

Behavior

Mechanics

Unlike db.collection.count(), db.collection.countDocuments() does not use the metadata to return the count. Instead, it performs an aggregation of the document to return an accurate count, even after an unclean shutdown or in the presence of orphaned documents in a sharded cluster.

db.collection.countDocuments() wraps the following aggregation operation and returns just the value of n:

db.collection.aggregate([
   { $match: <query> },
   { $group: { _id: null, n: { $sum: 1 } } } )
])

db.collection.countDocuments() errors on an empty or non-existing collection or view.

Query Restrictions

You cannot use the following query operators as part of the query expression for db.collection.countDocuments():

Restricted Operator Alternative
$where As an alternative, use $expr instead.
$near

As an alternative, use $geoWithin with $center; i.e.

{ $geoWithin: { $center: [ [ <x>, <y> ], <radius> ] } }
$nearSphere

As an alternative, use $geoWithin with $centerSphere; i.e.

{ $geoWithin: { $centerSphere: [ [ <x>, <y> ], <radius> ] } }

Transactions

db.collection.countDocuments() supports multi-document transactions.

Important

In most cases, multi-document transaction incurs a greater performance cost over single document writes, and the availability of multi-document transaction should not be a replacement for effective schema design. For many scenarios, the denormalized data model (embedded documents and arrays) will continue to be optimal for your data and use cases. That is, for many scenarios, modeling your data appropriately will minimize the need for multi-document transactions.

Examples

Count all Documents in a Collection

To count the number of all documents in the orders collection, use the following operation:

db.orders.countDocuments({})

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.countDocuments( { ord_dt: { $gt: new Date('01/01/2012') } }, { limit: 100 } )