cursor.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 that corresponds to countDocuments()
andestimatedDocumentCount()
. For the specific API names for agiven driver, see the driver API documentation.
Counts the number of documents referenced by a cursor. Append thecount()
method to afind()
query to return the number ofmatching documents. The operation does not perform the query butinstead counts the results that would be returned by the query.
Important
- Avoid using
count()
if thefind()
operation is run without aquery predicate since without the query predicate, thesecount()
returns results based on thecollection’s metadata, which may result in an approximatecount. 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.
The count()
method has the followingprototype form:
- db.collection.find(<query>).count()
The count()
method has the followingparameter:
ParameterTypeDescriptionapplySkipLimit
booleanOptional. Specifies whether to consider the effects of thecursor.skip()
and cursor.limit()
methods in thecount. By default, the count()
methodignores the effects of the cursor.skip()
andcursor.limit()
. Set applySkipLimit
to true
toconsider the effect of these methods.
MongoDB also provides an equivalent db.collection.count()
as an alternative to the db.collection.find(<query>).count()
construct.
MongoDB supports the use of hint()
withcount()
. See Specify the Index to Use for anexample.
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, count()
without a query predicate in the find
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.
Examples
The following are examples of the count()
method.
Count All Documents
The following operation counts the number of all documents in theorders
collection:
- db.orders.find().count()
Count Documents That Match a Query
The following operation counts the number of the documents in theorders
collection with the field ord_dt
greater than newDate('01/01/2012')
:
- db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).count()
Limit Documents in Count
The following operation counts the number of the documents in theorders
collection with the field orddt
greater than newDate('01/01/2012')
_taking into account the effect of thelimit(5)
:
- db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).limit(5).count(true)
Specify the Index to Use
The following operation uses the index named "status_1"
, which hasthe index key specification of { status: 1 }
, to return a count ofthe documents in the orders
collection with the field ord_dt
greater than new Date('01/01/2012')
and the status
field isequal to "D"
:
- db.orders.find(
- { ord_dt: { $gt: new Date('01/01/2012') }, status: "D" }
- ).hint( "status_1" ).count()