Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

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" },]);

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

O método distinct() retorna uma Promise que resolve para uma array dos valores distintos do campo. Use await para acessar o array de valores distintos, conforme mostrado nos exemplos desta página.

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 forconst distinctValues = await myColl.distinct("borough");console.log(distinctValues);

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 outputconst query = { borough: { $ne: "Brooklyn" }}; // find the filtered distinct values of "cuisine"const distinctValues = await myColl.distinct("cuisine", query);console.log(distinctValues);

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 documentconst query = {};// specify German string ordering conventionsconst options = { collation: { locale: "de" }}; const distinctValues = await myColl.distinct("restaurant", query, options);console.log(distinctValues);

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 de conexão. Este exemplo também usa a coleção movies no banco de dados sample_mflix incluído nos conjuntos de dados de amostra do Atlas. Você pode carregá-los em seu banco de dados em um cluster gratuito no MongoDB Atlas seguindo o MongoDB Get Started.

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 "Barbra Streisand" na array directors.

import { MongoClient } from "mongodb"; // Replace the uri string with your MongoDB deployment's connection string.const uri = "<connection string uri>"; const client = new MongoClient(uri); async function run() { try { // Get the database and collection on which to run the operation const database = client.db("sample_mflix"); const movies = database.collection("movies"); // Specify the document field to find distinct values for const fieldName = "year"; // Specify an optional query document to narrow results const query = { directors: "Barbra Streisand" }; // Execute the distinct operation const distinctValues = await movies.distinct(fieldName, query); // Print the result console.log(distinctValues); } finally { await client.close(); }}run().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: