Docs 菜单
Docs 主页
/ / /
Node.js
/

计算文档

Node.js 驱动程序提供了两种方法来对集合中的文档进行计数:

  • collection.countDocuments() 返回集合中与指定查询相匹配的文档的数量。如果指定空查询文档,则 countDocuments() 将返回集合中的文档总数。

  • collection.estimatedDocumentCount() 根据集合元数据返回集合中文档的估计数量。

estimatedDocumentCount()countDocuments() 速度更快,因为此估算会使用集合的元数据,而不是扫描集合。相比之下,countDocuments() 需要更长的时间才能返回,但它提供了文档数量的准确计数并支持指定筛选器。请为您的工作负载选择适当的方法。

为指定要对哪些文档进行计数, countDocuments()接受查询参数。 countDocuments()计算与指定查询匹配的文档的数量。

countDocuments()estimatedDocumentCount() 支持会影响此方法执行的可选设置。有关更多信息,请参阅每种方法的对应参考文档。

提示

使用 countDocuments() 返回集合中的文档总数时,可以通过避免集合扫描来提高性能。为此,请使用提示来利用 _id 字段上的内置索引。仅当使用空查询参数调用 countDocuments() 时才使用此技术。

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

以下示例估计 sample_mflix 数据库中 movies 集合中的文档数,然后返回 movies 集合中 countries 字段中包含 Canada 的文档数的准确计数。

注意

可以使用此示例连接到 MongoDB 实例,并与包含样本数据的数据库进行交互。如需了解有关连接到 MongoDB 实例和加载样本数据集的更多信息,请参阅使用示例指南

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

注意

相同的代码片段

上述 JavaScript 和 TypeScript 代码片段完全相同。驱动程序没有与此使用案例相关的特定于 TypeScript 的功能。

运行上述示例代码应该会有以下输出:

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

后退

删除多个文档