检索字段的不同值
您可以使用 集合 .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
类型,例如为 Document
、Array
、Number
或 null
,则该方法不会执行且会返回 TypeMismatch
错误并显示类似以下内容的消息:
“key”的类型错误。预期为字符串,但找到<non-string type>
有关distinct()
方法的更多信息,请访问检索不同值。
例子
以下代码段从 movies
集合中检索 year
文档字段的非重复值列表。它使用查询文档来匹配包含“Barbara Streisand”作为 director
的电影。
注意
可以使用此示例连接到 MongoDB 实例,并与包含样本数据的数据库进行交互。如需了解有关连接到 MongoDB 实例和加载样本数据集的更多信息,请参阅使用示例指南。
1 import { MongoClient } from "mongodb"; 2 3 // Replace the uri string with your MongoDB deployment's connection string. 4 const uri = "<connection string uri>"; 5 6 const client = new MongoClient(uri); 7 8 async 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 } 30 run().catch(console.dir);
1 import { MongoClient } from "mongodb"; 2 3 // Replace the uri string with your MongoDB deployment's connection string. 4 const uri = "<connection string uri>"; 5 6 const client = new MongoClient(uri); 7 8 interface Movie { 9 directors: string; 10 year: number; 11 } 12 13 async 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 } 28 run().catch(console.dir);
运行前面的示例,您将看到以下输出:
[ 1983, 1991, 1996 ]