Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Retrieve Distinct Values

Usa el distinct() método para recuperar todos los valores distintos de un campo especificado en una colección.

Para seguir los ejemplos de esta guía, utiliza el siguiente snippet para insertar documentos que describan restaurantes en la colección 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" },
]);

Nota

Tu operación de consulta puede devolver una referencia a un cursor que contenga documentos coincidentes. Para aprender a examinar los datos almacenados en el cursor, consulta el Acceder a los datos desde una página de cursor.

El método distinct() requiere un campo de documento como parámetro. Puedes especificar los siguientes parámetros opcionales para ajustar la salida del método:

  • Un parámetro query para refinar sus resultados

  • Un parámetro options para establecer reglas de intercalación

Pasa el nombre del campo del documento para devolver una lista de los valores únicos del campo.

Los valores "Queens" y "Manhattan" del borough aparecen más de una vez en los documentos de muestra. Sin embargo, el siguiente ejemplo recupera los valores únicos del 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 genera los siguientes valores de borough:

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

Puedes especificar un parámetro de query para devolver valores únicos de los documentos que coincidan con tu query.

Visite Especificar una consulta para obtener más información sobre cómo construir un filtro de consulta.

El siguiente ejemplo genera los valores distintos del campo cuisine pero excluye los restaurantes en "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);
}

En este caso, el filtro de query coincide con todos los valores de distrito excepto "Brooklyn". Esto evita que distinct() emita un valor cuisine, "Middle Eastern". El código arroja los siguientes valores:

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

Puede especificar la intercalación para el método distinct() definiendo un campo collation como un parámetro options. Este campo permite establecer reglas regionales para el orden y la comparación de cadenas.

Consulta la sección Intercalación de la guía Configuración de operaciones CRUD para obtener instrucciones sobre cómo aplicar intercalaciones.

Nota

Cuando uses el parámetro options, también debes especificar un parámetro query. Si no quieres usar un filtro de query, define la query como {}.

El siguiente ejemplo utiliza un campo collation para especificar las convenciones de ordenamiento del lenguaje alemán al mostrar los 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);
}

En este caso, las convenciones alemanas de ordenación de string colocan las palabras que comienzan con "Ä" antes que las que comienzan con "B". El código produce lo siguiente:

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

Si no especificas el campo collation, el orden de salida seguirá las reglas de intercalación binaria por defecto. Estas reglas colocan las palabras que comienzan con "Ä" después de aquellas con letras sin tilde al principio:

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

Nota

Configuración de ejemplo

Este ejemplo se conecta a una instancia de MongoDB mediante una URI de conexión. Para obtener más información sobre cómo conectarse a su instancia de MongoDB, consulte la guía Conectarse a MongoDB. Este ejemplo también utiliza la movies colección de la sample_mflix base de datos incluida en Conjuntos de datos de muestra de Atlas. Puede cargarlos en su base de datos en la versión gratuita de MongoDB Atlas siguiendo la guía de introducción de MongoDB.

El siguiente snippet recupera una lista de valores distintos para el campo del documento year de la colección movies. Utiliza un documento de consulta para encontrar películas que incluyan "Barbara Streisand" en el arreglo 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);

Al ejecutar el ejemplo anterior, se obtiene la siguiente salida:

[ 1983, 1991, 1996 ]

Para aprender más sobre cualquiera de los tipos o métodos discutidos en esta guía, consulta la siguiente documentación de la API:

Volver

Contabilizar documentos

En esta página