Docs Menu
Docs Home
/
MongoDB Manual
/ / /

db.collection.countDocuments()

On this page

  • Definition
  • Compatibility
  • Syntax
  • Behavior
  • Examples

MongoDB with drivers

This page documents a mongosh method. To see the equivalent method in a MongoDB driver, see the corresponding page for your programming language:

C#Java SyncNode.jsCC++GoJava RSKotlin CoroutineKotlin SyncPHPMotorPyMongoRustScalaSwift
db.collection.countDocuments(query, options)

Returns an integer for the number of documents that match the query of the collection or view. This method is available for use in Transactions.

You can use db.collection.countDocuments() for deployments hosted in the following environments:

  • MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud

The countDocuments() method has the following form:

db.collection.countDocuments( <query>, <options> )

The countDocuments() method takes the following parameters:

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.

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() returns 0 on an empty or non-existing collection or view.

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

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

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

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

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

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

db.collection.countDocuments() can be used inside distributed transactions.

When you use db.collection.countDocuments() in a transaction, the resulting count will not filter out any uncommitted multi-document transactions.

Important

In most cases, a distributed transaction incurs a greater performance cost over single document writes, and the availability of distributed transactions 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 distributed transactions.

For additional transactions usage considerations (such as runtime limit and oplog size limit), see also Production Considerations.

Starting in MongoDB 4.2, if the client that issued db.collection.countDocuments() disconnects before the operation completes, MongoDB marks db.collection.countDocuments() for termination using killOp.

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

db.orders.countDocuments( {}, { hint: "_id_"} )

Note

If you use db.collection.countDocuments() with an empty query filter, MongoDB performs a full collection scan which can be inefficient. To improve performance, this example specifies a hint() to use the automatically generated _id index. Alternatively, you can use a query filter that finds all documents such as { "_id": { $gte: MinKey } } to count all documents using an index.

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 } )

Tip

See also:

Back

db.collection.count