count

Definition

  • count
  • Counts the number of documents in a collection or a view. Returns adocument that contains this count and as well as the command status.

Note

MongoDB drivers compatible with the 4.0 features deprecate theirrespective cursor and collection count() APIs (which runs thecount command) in favor of new APIs that corresponds tocountDocuments() and estimatedDocumentCount(). For thespecific API names for a given driver, see the driver APIdocumentation.

count has the following form:

Note

Starting in version 4.2, MongoDB implements a stricter validation ofthe option names for the count command. The command nowerrors if you specify an unknown option name.

  1. {
  2. count: <collection or view>,
  3. query: <document>,
  4. limit: <integer>,
  5. skip: <integer>,
  6. hint: <hint>,
  7. readConcern: <document>,
  8. collation: <document>
  9. }

count has the following fields:

FieldTypeDescriptioncountstringThe name of the collection or view to count.querydocumentOptional. A query that selects which documents to count in the collection or view.limitintegerOptional. The maximum number of matching documents to return.skipintegerOptional. The number of matching documents to skip before returning results.hintstring or documentOptional. The index to use. Specify either the index name as a string or theindex specification document.

New in version 2.6.

readConcerndocumentOptional. Specifies the read concern. The option has the followingsyntax:

  1. readConcern: { level: <value> }

Possible read concern levels are:

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:

  1. collation: {
  2. locale: <string>,
  3. caseLevel: <boolean>,
  4. caseFirst: <string>,
  5. strength: <int>,
  6. numericOrdering: <boolean>,
  7. alternate: <string>,
  8. maxVariable: <string>,
  9. backwards: <boolean>
  10. }

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.

The mongo shell also provides the following wrapper methods for count:

Important

Behavior

Count and Transactions

You cannot use count and shell helperscount() and db.collection.count() intransactions.

For details, see Transactions and Count Operations.

Accuracy and Sharded Clusters

On a sharded cluster, the count command when run 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:

  1. db.collection.aggregate( [
  2. { $count: "myCount" }
  3. ])

The $count stage is equivalent to the following$group + $project sequence:

  1. db.collection.aggregate( [
  2. { $group: { _id: null, count: { $sum: 1 } } }
  3. { $project: { _id: 0 } }
  4. ] )

See also

$collStats to return an approximate count based on the collection’s metadata.

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 mongodto restore the correct statistics after an unclean shutdown.

Note

This loss of accuracy only applies to countoperations that do not include a query document.

Client Disconnection

Starting in MongoDB 4.2, if the client that issued the countdisconnects before the operation completes, MongoDB marksthe count for termination (i.e. killOp on theoperation).

Examples

The following sections provide examples of the countcommand.

Count All Documents

The following operation counts the number of all documents in theorders collection:

  1. db.runCommand( { count: 'orders' } )

In the result, the n, which represents the count, is 26,and the command status ok is 1:

  1. { "n" : 26, "ok" : 1 }

Count Documents That Match a Query

The following operation returns a count of the documents in theorders collection where the value of the ord_dt field isgreater than Date('01/01/2012'):

  1. db.runCommand( { count:'orders',
  2. query: { ord_dt: { $gt: new Date('01/01/2012') } }
  3. } )

In the result, the n, which represents the count, is 13and the command status ok is 1:

  1. { "n" : 13, "ok" : 1 }

Skip Documents in Count

The following operation returns a count of the documents in theorders collection where the value of the ord_dt field isgreater than Date('01/01/2012') and skip the first 10 matchingdocuments:

  1. db.runCommand( { count:'orders',
  2. query: { ord_dt: { $gt: new Date('01/01/2012') } },
  3. skip: 10 } )

In the result, the n, which represents the count, is 3 andthe command status ok is 1:

  1. { "n" : 3, "ok" : 1 }

Specify the Index to Use

The following operation uses the index { status: 1 } to return acount of the documents in the orders collection where the value ofthe ord_dt field is greater than Date('01/01/2012') and thestatus field is equal to "D":

  1. db.runCommand(
  2. {
  3. count:'orders',
  4. query: {
  5. ord_dt: { $gt: new Date('01/01/2012') },
  6. status: "D"
  7. },
  8. hint: { status: 1 }
  9. }
  10. )

In the result, the n, which represents the count, is 1 andthe command status ok is 1:

  1. { "n" : 1, "ok" : 1 }

Override Default Read Concern

To override the default read concern level of "local",use the readConcern option.

The following operation on a replica set specifies aRead Concern of "majority" to read themost recent copy of the data confirmed as having been written to amajority of the nodes.

Important

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 use the readConcern level of "majority", you must specifya nonempty query condition.

  • Regardless of the read concern level, the most recent data on anode may not reflect the most recent version of the data in the system.

  1. db.runCommand(
  2. {
  3. count: "restaurants",
  4. query: { rating: { $gte: 4 } },
  5. readConcern: { level: "majority" }
  6. }
  7. )

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.