Menu Docs
Página inicial do Docs
/ / /
Controlador Node.js
/ /

Retrieve Distinct Values

Utilize o método distinct() para recuperar todos os valores distintos para um campo especificado em uma collection.

Para seguir os exemplos deste guia, utilize o seguinte trecho de código para inserir documento que descrevem restaurantes na collection myDB.restaurants :

const myDB = client.db("myDB");
const myColl = myDB.collection("restaurants");
await myColl.insertMany([
{ "_id": 1, "restaurant": "White Bear", "borough": "Queens", "cuisine": "Chinese" },
{ "_id": 2, "restaurant": "Via Carota", "borough": "Manhattan", "cuisine": "Italian" },
{ "_id": 3, "restaurant": "Borgatti's", "borough": "Bronx", "cuisine": "Italian" },
{ "_id": 4, "restaurant": "Tanoreen", "borough": "Brooklyn", "cuisine": "Middle Eastern" },
{ "_id": 5, "restaurant": "Äpfel", "borough": "Queens", "cuisine": "German" },
{ "_id": 6, "restaurant": "Samba Kitchen", "borough": "Manhattan", "cuisine": "Brazilian" },
]);

Observação

Sua operação de query pode retornar uma referência a um cursor que contém documentos correspondentes. Para saber como examinar os dados armazenados no cursor, consulte a página Acessar dados de um cursor.

O método distinct() exige um campo de documento como parâmetro. Você pode especificar os seguintes parâmetros opcionais para ajustar a saída do método:

  • Um parâmetro query para refinar seus resultados

  • Um parâmetro options para definir regras de agrupamento

Passe o nome do campo do documento para retornar uma lista dos valores exclusivos do campo.

Os valores de distrito "Queens" e "Manhattan" aparecem mais de uma vez nos documentos de exemplo. No entanto, o exemplo seguinte recupera os valores únicos do campo borough :

// specify "borough" as the field to return values for
const cursor = myColl.distinct("borough");
for await (const doc of cursor) {
console.dir(doc);
}

Este código gera os seguintes valores borough :

[ "Bronx", "Brooklyn", "Manhattan", "Queens" ]

Você pode especificar um parâmetro de query para retornar valores exclusivos para documentos que correspondem à sua query.

Visite Especifique uma consulta para obter mais informações sobre como construir um filtro de queries.

O exemplo seguinte gera os valores distintos do campo cuisine , mas exclui restaurantes em "Brooklyn":

// exclude Brooklyn restaurants from the output
const query = { borough: { $ne: "Brooklyn" }};
// find the filtered distinct values of "cuisine"
const cursor = myColl.distinct("cuisine", query);
for await (const doc of cursor) {
console.dir(doc);
}

Neste caso, o filtro de query corresponde a todos os valores de bairro, exceto para "Brooklyn". Isso impede que distinct() produza um valor cuisine , "Middle Eastern". O código gera os seguintes valores:

[ "Brazilian", "Chinese", "German", "Italian" ]

Você pode especificar o agrupamento para o método distinct() definindo um campo collation como um parâmetro options . Esse campo permite definir regras regionais para ordenação e comparações de strings.

Consulte a seção Agrupamento do guia Configurar operações CRUD para obter instruções sobre como aplicar agrupamentos.

Observação

Ao utilizar o parâmetro options , você também deve especificar um parâmetro query . Se você não quiser usar um filtro de query, defina a query como {}.

O exemplo a seguir usa um campo collation para especificar as convenções de ordenação do idioma alemão ao gerar os valores restaurant distintos:

// define an empty query document
const query = {};
// specify German string ordering conventions
const options = { collation: { locale: "de" }};
const cursor = myColl.distinct("restaurant", query, options);
for await (const doc of cursor) {
console.dir(doc);
}

Nesse caso, as convenções alemãs de ordenação de strings colocam as palavras que começam com "Ä" antes daquelas que começam com "B". O código gera o seguinte:

[ "Äpfel", "Borgatti's", "Samba Kitchen", "Tanoreen", "Via Carota", "White Bear" ]

Se você não especificar o campo collation , a ordem de saída seguirá as regras de agrupamento binárias padrão. Essas regras colocam as palavras que começam com "Ä" depois daquelas com as primeiras letras não destacadas:

[ "Borgatti's", "Samba Kitchen", "Tanoreen", "Via Carota", "White Bear", "Äpfel" ]

Observação

Exemplo de configuração

Esse exemplo se conecta a uma instância do MongoDB usando um URI de conexão. Para saber mais sobre como se conectar à sua instância do MongoDB, consulte o guia Conectar ao MongoDB. Este exemplo também utiliza a coleção do movies no banco de dados do sample_mflix incluído nosconjuntos de dados de amostra do Atlas do . Você pode carregá-los em seu banco de dados na camada grátis do MongoDB Atlas seguindo o Guia de Introdução ao Atlas.

O seguinte trecho recupera uma lista de valores distintos para o campo de documento year da collection movies. Ele usa um documento de query para corresponder a filmes que incluem "Barbara Streisand" na array director.

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

A execução do exemplo anterior resulta na seguinte saída:

[ 1983, 1991, 1996 ]

Para saber mais sobre qualquer um dos tipos ou métodos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

Contagem de documentos

Nesta página