Docs Menu
Docs Home
/ / /
Node.js
/

Count Documents

The Node.js driver provides two methods for counting documents in a collection:

  • collection.countDocuments() returns the number of documents in the collection that match the specified query. If you specify an empty query document, countDocuments() returns the total number of documents in the collection.

  • collection.estimatedDocumentCount() returns an estimation of the number of documents in the collection based on collection metadata.

estimatedDocumentCount() is faster than countDocuments() because the estimation uses the collection's metadata rather than scanning the collection. In contrast, countDocuments() takes longer to return, but provides an accurate count of the number of documents and supports specifying a filter. Choose the appropriate method for your workload.

To specify which documents you wish to count, countDocuments() accepts a query parameter. countDocuments() counts the documents that match the specified query.

countDocuments() and estimatedDocumentCount() support optional settings that affect the method's execution. Refer to the reference documentation for each method for more information.

Tip

You can improve performance when using countDocuments() to return the total number of documents in a collection by avoiding a collection scan. To do this, use a hint to take advantage of the built-in index on the _id field. Use this technique only when calling countDocuments() with an empty query parameter.

collection.countDocuments({}, { hint: "_id_" });

The following example estimates the number of documents in the movies collection in the sample_mflix database, and then returns an accurate count of the number of documents in the movies collection with Canada in the countries field.

Note

You can use this example to connect to an instance of MongoDB and interact with a database that contains sample data. To learn more about connecting to your MongoDB instance and loading a sample dataset, see the Usage Examples guide.

1import { MongoClient } from "mongodb";
2
3// Replace the uri string with your MongoDB deployment's connection string.
4const uri = "<connection string uri>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("sample_mflix");
11 const movies = database.collection("movies");
12
13 // Estimate the total number of documents in the collection
14 // and print out the count.
15 const estimate = await movies.estimatedDocumentCount();
16 console.log(`Estimated number of documents in the movies collection: ${estimate}`);
17
18 // Query for movies from Canada.
19 const query = { countries: "Canada" };
20
21 // Find the number of documents that match the specified
22 // query, (i.e. with "Canada" as a value in the "countries" field)
23 // and print out the count.
24 const countCanada = await movies.countDocuments(query);
25 console.log(`Number of movies from Canada: ${countCanada}`);
26 } finally {
27 await client.close();
28 }
29}
30run().catch(console.dir);
1import { MongoClient } from "mongodb";
2
3// Replace the uri string with your MongoDB deployment's connection string.
4const uri = "<connection string uri>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("sample_mflix");
11 const movies = database.collection("movies");
12
13 // Estimate the total number of documents in the collection
14 // and print out the count.
15 const estimate = await movies.estimatedDocumentCount();
16 console.log(`Estimated number of documents in the movies collection: ${estimate}`);
17
18 // Query for movies from Canada.
19 const query = { countries: "Canada" };
20
21 // Find the number of documents that match the specified
22 // query, (i.e. with "Canada" as a value in the "countries" field)
23 // and print out the count.
24 const countCanada = await movies.countDocuments(query);
25 console.log(`Number of movies from Canada: ${countCanada}`);
26 } finally {
27 await client.close();
28 }
29}
30run().catch(console.dir);

Note

Identical Code Snippets

The JavaScript and TypeScript code snippets above are identical. There are no TypeScript specific features of the driver relevant to this use case.

If you run the preceding sample code, you should see the following output:

Estimated number of documents in the movies collection: 23541
Number of movies from Canada: 1349

Back

Delete Multiple Documents

Next

Retrieve Distinct Values of a Field