Docs 菜单
Docs 主页
/ / /
Node.js 驱动程序
/

检索字段的不同值

您可以使用 集合 .distinct() 来检索集合中某个字段的非重复值列表。方法。 在 Collection对象上调用 distinct() 方法,并将文档字段名称参数作为 String 来生成列表,其中包含在指定文档字段中找到的每个不同值之一,如下所示:

const distinctValues = myColl.distinct("countries", query);

您可以使用 点表示法 在 嵌入式文档 中指定文档字段。如果对包含数组的文档字段调用distinct() ,该方法会将每个元素视为单独的值。 请参阅以下示例,了解对awards子文档中wins字段的方法调用:

const distinctValues = myColl.distinct("awards.wins", query);

您可以使用作为第三个参数传递给distinct()方法的options对象来指定更多查询选项。 有关查询参数的详细信息,请参阅 API 文档中的 distinct() 方法。

如果您为此文档字段名称指定的值不是 String 类型,例如为 DocumentArrayNumbernull,则该方法不会执行且会返回 TypeMismatch 错误并显示类似以下内容的消息:

“key”的类型错误。预期为字符串,但找到<non-string type>

有关distinct()方法的更多信息,请访问检索不同值

以下代码段从 movies 集合中检索 year 文档字段的非重复值列表。它使用查询文档来匹配包含“Barbara Streisand”作为 director 的电影。

注意

可以使用此示例连接到 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
11 // Get the database and collection on which to run the operation
12 const database = client.db("sample_mflix");
13 const movies = database.collection("movies");
14
15 // Specify the document field to find distinct values for
16 const fieldName = "year";
17
18 // Specify an optional query document to narrow results
19 const query = { directors: "Barbra Streisand" };
20
21 // Execute the distinct operation
22 const distinctValues = await movies.distinct(fieldName, query);
23
24 // Print the result
25 console.log(distinctValues);
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
8interface Movie {
9 directors: string;
10 year: number;
11}
12
13async function run() {
14 try {
15 // define a database and collection on which to run the method
16 const database = client.db("sample_mflix");
17 const movies = database.collection<Movie>("movies");
18
19 const distinctValues = await movies.distinct("year", {
20 directors: "Barbra Streisand",
21 });
22
23 console.log(distinctValues);
24 } finally {
25 await client.close();
26 }
27}
28run().catch(console.dir);

运行前面的示例,您将看到以下输出:

[ 1983, 1991, 1996 ]

后退

计算文档