Visão geral
Utilize o método distinct() para recuperar todos os valores distintos para um campo especificado em uma collection.
Documentos de amostra
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" },]);distinto
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
querypara refinar seus resultadosUm parâmetro
optionspara 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.
Parâmetro do campo do documento
Passe o nome do campo do documento para retornar uma lista dos valores exclusivos do campo.
Exemplo
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" ]Parâmetro de query
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.
Exemplo
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" ]Parâmetro de opções
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 {}.
Exemplo
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" ]distinct() Exemplo: Arquivo Completo
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);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);
interface Movie { directors: string; year: number;}
async function run() { try { // define a database and collection on which to run the method const database = client.db("sample_mflix"); const movies = database.collection<Movie>("movies");
const distinctValues = await movies.distinct("year", { directors: "Barbra Streisand", });
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 ]Documentação da API
Para saber mais sobre qualquer um dos tipos ou métodos discutidos neste guia, consulte a seguinte documentação da API: