Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Recuperar valores distintos de campo

Dentro de una colección, diferentes documentos podrían contener valores diferentes para un solo campo. Por ejemplo, un documento en la colección restaurant tiene un valor de borough de "Manhattan" y otro tiene un valor de borough de "Queens". Con el controlador Reactive Streams de Java, puedes recuperar todos los valores distintos que contiene un campo en varios documentos de una colección.

Los ejemplos en esta guía utilizan la colección sample_restaurants.restaurants de los conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte Primeros pasos.

Importante

Proyecto Reactor librería

Esta guía usa la librería Proyecto Reactor para consumir instancias Publisher devueltas por los métodos del driver Reactive Streams de Java. Para obtener más información sobre la biblioteca Project Reactor y cómo utilizarla, consulta Primeros pasos en la documentación de Reactor. Para obtener más información sobre cómo utilizamos los métodos de la librería Project Reactor en esta guía, consulta la guía Guardar datos en MongoDB.

Para recuperar los valores distintos de un campo especificado, llama al método distinct() y pasa el nombre del campo para el que deseas encontrar valores distintos.

El siguiente ejemplo recupera los valores distintos del campo borough en la colección restaurants:

DistinctPublisher<String> distinctPublisher = collection
.distinct("borough", String.class);
Flux.from(distinctPublisher)
.doOnNext(System.out::println)
.blockLast();
Bronx
Brooklyn
Manhattan
Missing
Queens
Staten Island

Los resultados muestran cada valor distinto que aparece en el campo borough en todos los documentos de la colección. Aunque varios documentos tienen el mismo valor en el campo borough, cada valor aparece en los resultados solo una vez.

Puede proporcionar un filtro de query al método distinct() para encontrar los distintos valores de campo en un subconjunto de documentos en una colección. Un filtro de query es una expresión que especifica los criterios de búsqueda utilizados para encontrar documentos en una operación. Para obtener más información sobre cómo crear un filtro de query, consulte Especificar una query.

El siguiente ejemplo recupera los valores distintos del campo borough para todos los documentos que tienen un valor de campo cuisine de "Italian":

Bson filter = Filters.eq("cuisine", "Italian");
DistinctPublisher<String> distinctPublisher = collection
.distinct("borough", String.class)
.filter(filter);
Flux.from(distinctPublisher)
.doOnNext(System.out::println)
.blockLast();
Bronx
Brooklyn
Manhattan
Queens
Staten Island

El método distinct() se puede modificar encadenando métodos a la llamada del método distinct(). Si no especificas ninguna opción, el driver no personaliza la operación.

La siguiente tabla describe algunos métodos que puede usar para personalizar la operación distinct():

Método
Descripción

batchSize()

Establece el número de documentos que se devolverán por lote. Por defecto, el controlador establece este valor en Long.MAX_VALUE.

Un batchSize de 0 significa que el cursor se establecerá, pero no se devolverá ningún documento en el primer lote.

collation()

Especifica el tipo de intercalación de lenguaje a usar al ordenar los resultados. Para obtener más información, consulte intercalación en el manual de MongoDB Server.

comment()

Especifica un comentario para adjuntar a la operación.

filter()

Establece el filtro de query a aplicar a la query.

Para obtener una lista completa de los métodos que puede usar para modificar el método distinct(), consulte la DistinctPublisher documentación de la API.

El siguiente ejemplo recupera los valores distintos del campo name para todos los documentos que tengan un valor de campo borough de "Bronx" y un valor de campo cuisine de "Pizza". También utiliza la opción comment para añadir un comentario a la operación.

Bson filter = Filters.and(
Filters.eq("borough", "Bronx"),
Filters.eq("cuisine", "Pizza")
);
DistinctPublisher<String> distinctPublisher = collection
.distinct("name", String.class)
.filter(filter)
.comment("Bronx pizza restaurants");
Flux.from(distinctPublisher)
.doOnNext(System.out::println)
.blockLast();
$1.25 Pizza
18 East Gunhill Pizza
2 Bros
Aenos Pizza
Alitalia Pizza Restaurant
...

Para obtener más información sobre el comando distinct, consulta la Guía de distinción en el Manual de MongoDB Server.

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