Docs Menu
Docs Home
/ /
/ / /

Recuperar valores distintos de campo

Dentro de una colección, diferentes documentos pueden contener distintos valores para un mismo campo. Por ejemplo, un documento en la restaurant Una colección tiene un valor borough de "Manhattan" y otra tiene un valor borough de "Queens". Con el controlador Java Reactive Streams, puede recuperar todos los valores distintos que contiene un campo en varios documentos de una colección.

Los ejemplos de esta guía utilizan la colección sample_restaurants.restaurants de 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 Empezar.

Importante

Proyecto Reactor librería

Esta guía utiliza la biblioteca Project Reactor para consumir Publisher las instancias devueltas por los métodos del controlador Java Reactive Streams. Para obtener más información sobre la biblioteca Project Reactor y cómo usarla, consulte la sección "Introducción" en la documentación de Reactor. Para obtener más información sobre cómo usamos los métodos de la biblioteca Project Reactor en esta guía, consulte la guía "Escribir datos en MongoDB".

Para recuperar los valores distintos de un campo específico, llame al método distinct() y pase el nombre del campo para el cual desea 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 todos los valores distintos que aparecen 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 solo una vez en los resultados.

Puede aplicar un filtro de consulta al distinct() método para encontrar los distintos valores de campo en un subconjunto de documentos de una colección. Un filtro de consulta 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 consulta, consulte Especificar una consulta.

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 al método distinct(). Si no se especifica ninguna opción, el controlador no personaliza la operación.

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

Método
Descripción

batchSize()

Sets the number of documents to return per batch. By default, returns an initial batch size of 101 documents and a maximum size of 16 mebibytes (MiB) for each subsequent batch. This option can enforce a smaller limit than 16 MiB, but not a larger one.
A batchSize of 0 means that the cursor will be established, but no documents will be returned in the first batch.

collation()

Specifies the kind of language collation to use when sorting results. For more information, see Collation in the MongoDB Server manual.

comment()

Specifies a comment to attach to the operation.

filter()

Sets the query filter to apply to the query.

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

El siguiente ejemplo recupera los valores distintos del campo name para todos los documentos cuyo valor de campo borough es "Bronx" y cuyo valor de campo cuisine es "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, consulte la guía Distinct en el Manual del servidor MongoDB.

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

Volver

Contabilizar documentos

En esta página