Docs Menu
Docs Home
/ /

Retrieve Distinct Values

Uso el distinct() método para recuperar todos los valores distintos para un campo específico en una colección.

Para seguir los ejemplos de esta guía, utilice el siguiente fragmento de código 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

Su consulta puede devolver una referencia a un cursor que contiene documentos coincidentes. Para saber cómo examinar los datos almacenados en el cursor, consulte Acceder a datos desde una página de cursor.

El método distinct() requiere un campo de documento como parámetro. Puede 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

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

Los valores de distrito "Queens" y "Manhattan" aparecen más de una vez en los documentos de ejemplo. 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 borough:

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

Puede especificar un parámetro de consulta para devolver valores únicos para los documentos que coincidan con su consulta.

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 consulta coincide con todos los valores de distrito excepto "Brooklyn". Esto evita que distinct() genere un valor de cuisine, "Middle Eastern". El código genera los siguientes valores:

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

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

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

Nota

Al usar el parámetro options, también debe especificar un parámetro query. Si no desea usar un filtro de consulta, defina la consulta como {}.

El siguiente ejemplo utiliza un campo collation para especificar las convenciones de ordenamiento del idioma alemán al generar 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 de ordenación de cadenas alemanas colocan las palabras que empiezan por "Ä" antes de las que empiezan por "B". El código genera lo siguiente:

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

Si no se especifica el campo collation, el orden de salida sigue las reglas de intercalación binaria predeterminadas. Estas reglas colocan las palabras que empiezan por "Ä" después de aquellas cuya primera letra no está acentuada:

[ "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 fragmento recupera una lista de valores distintos para el campo de documento year de la colección movies. Utiliza un documento de consulta para buscar películas que incluyan "Barbara Streisand" en la matriz 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 el siguiente resultado:

[ 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