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.
- {
- count: <collection or view>,
- query: <document>,
- limit: <integer>,
- skip: <integer>,
- hint: <hint>,
- readConcern: <document>,
- collation: <document>
- }
count
has the following fields:
FieldTypeDescriptioncount
stringThe name of the collection or view to count.query
documentOptional. A query that selects which documents to count in the collection or view.limit
integerOptional. The maximum number of matching documents to return.skip
integerOptional. The number of matching documents to skip before returning results.hint
string or documentOptional. The index to use. Specify either the index name as a string or theindex specification document.
New in version 2.6.
readConcern
documentOptional. Specifies the read concern. The option has the followingsyntax:
- readConcern: { level: <value> }
Possible read concern levels are:
"local"
. This is the default read concern level forread operations against primary and read operations againstsecondaries when associated with causally consistent sessions."available"
. This is the default for reads againstsecondaries when when not associated with causally consistentsessions. The query returns the instance’s mostrecent data."majority"
. Available for replica sets that useWiredTiger storage engine."linearizable"
. Available for read operations on theprimary
only.For more formation on the read concern levels, seeRead Concern Levels.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.
The mongo
shell also provides the following wrapper methods for count
:
Important
- Avoid using the
count
and its wrapper methodswithout a query predicate (note:db.collection.estimatedDocumentCount()
does not takea query predicate) since without the query predicate, theseoperations return results based on the collection’s metadata,which may result 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 be incorrect.
- For counts based on collection metadata, see alsocollStats pipeline stage with the countoption.
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:
- 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.
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 document.
Client Disconnection
Starting in MongoDB 4.2, if the client that issued the count
disconnects before the operation completes, MongoDB marksthe count
for termination (i.e. killOp
on theoperation).
Examples
The following sections provide examples of the count
command.
Count All Documents
The following operation counts the number of all documents in theorders
collection:
- db.runCommand( { count: 'orders' } )
In the result, the n
, which represents the count, is 26
,and the command status ok
is 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')
:
- db.runCommand( { count:'orders',
- query: { ord_dt: { $gt: new Date('01/01/2012') } }
- } )
In the result, the n
, which represents the count, is 13
and the command status ok
is 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:
- db.runCommand( { count:'orders',
- query: { ord_dt: { $gt: new Date('01/01/2012') } },
- skip: 10 } )
In the result, the n
, which represents the count, is 3
andthe command status ok
is 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"
:
- db.runCommand(
- {
- count:'orders',
- query: {
- ord_dt: { $gt: new Date('01/01/2012') },
- status: "D"
- },
- hint: { status: 1 }
- }
- )
In the result, the n
, which represents the count, is 1
andthe command status ok
is 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
- 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 use the
readConcern
level of"majority"
, you must specifya nonemptyquery
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.
- db.runCommand(
- {
- count: "restaurants",
- query: { rating: { $gte: 4 } },
- readConcern: { level: "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.