Recuperar valores distintos de um campo
Você pode recuperar uma lista de valores distintos para um campo em uma collection usando o método collection.distinct(). método. Chame o método distinct()
em um Collection
com um parâmetro de nome de campo de documento como String
para produzir uma lista que contenha um de cada um dos diferentes valores encontrados no campo do documento especificado, conforme mostrado abaixo:
const distinctValues = myColl.distinct("countries", query);
Você pode especificar um campo de documento dentro de um documento incorporado usando a notação de ponto. Se você chamar distinct()
em um campo de documento que contém uma array, o método tratará cada elemento como um valor separado. Consulte o seguinte exemplo de uma chamada de método para o campo wins
no subdocumento awards
:
const distinctValues = myColl.distinct("awards.wins", query);
Você pode especificar opções de consulta adicionais utilizando o objeto options
passado como o terceiro parâmetro para o método distinct()
. Para obter detalhes sobre os parâmetros de consulta, consulte o método distinct() na documentação da API.
Se você especificar um valor para o nome do campo do documento que não é do tipo String
como Document
, Array
, Number
ou null
, o método não será executado e retornará um erro do TypeMismatch
com uma mensagem semelhante ao seguinte:
"key" teve o tipo errado. String esperada, encontrada <non-string type>
Visite Retrieve Distinct Values para obter mais informações sobre o método distinct()
.
Exemplo
O seguinte trecho recupera uma lista de valores distintos para o campo de documento year
da coleção movies
. Utiliza um documento de consulta para corresponder a filmes que incluem "Barbara Streisand" como director
.
Observação
Você pode utilizar este exemplo para se conectar a uma instância do MongoDB e interagir com um banco de dados que contém dados de amostra. Para saber mais sobre como se conectar à sua instância do MongoDB e carregar um conjunto de dados de amostra, consulte o Guia de exemplos de uso.
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);
Se você executar o exemplo anterior, verá a seguinte saída:
[ 1983, 1991, 1996 ]