Overview
Dentro de una colección, diferentes documentos pueden contener diferentes valores para un solo campo. Por ejemplo, un documento en la colección restaurant tiene un valor borough de "Manhattan", y otro tiene valor borough de "Queens". Con el driver Kotlin sincronizar, puedes recuperar todos los valores distintos que un campo contiene a lo largo de múltiples documentos en una colección.
Datos de muestra
Los ejemplos de esta guía utilizan la colección restaurants en la base de datos sample_restaurants de los conjuntos de datos de muestra de Atlas. Para aprender cómo crear una implementación gratuita de MongoDB y cargar los conjuntos de datos de muestra, consulta la guía de MongoDB Comenzar.
La siguiente clase de datos de Kotlin modela los documentos de esta colección:
data class Restaurant( val name: String, val borough: String, val cuisine: String )
distinct() Método
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.
Recuperar valores distintos en una colección
El siguiente ejemplo recupera los valores distintos del campo borough en la colección restaurants:
val results = collection.distinct<String>(Restaurant::borough.name) results.forEach { result -> println(result) }
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.
Recupere valores distintos en documentos especificados
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":
val results = collection.distinct<String>( Restaurant::borough.name, eq(Restaurant::cuisine.name, "Italian") ) results.forEach { result -> println(result) }
Bronx Brooklyn Manhattan Queens Staten Island
Modificar el comportamiento de Distinct
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 |
|---|---|
| Establece la cantidad de documentos que se devolverán por lote. |
| 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. |
| Especifica un comentario para adjuntar a la operación. |
| Establece el filtro de query a aplicar a la query. |
| Realiza la acción indicada en cada elemento devuelto por la operación |
Para obtener una lista completa de los métodos que puedes utilizar para modificar el método distinct(), consulta la DistinctIterable 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.
val results = collection.distinct<String>( Restaurant::name.name, and( eq(Restaurant::borough.name, "Bronx"), eq(Restaurant::cuisine.name, "Pizza") ) ).comment("Bronx pizza restaurants") results.forEach { result -> println(result) }
$1.25 Pizza 18 East Gunhill Pizza 2 Bros Aenos Pizza Alitalia Pizza Restaurant ...
Información Adicional
Para obtener más información sobre el comando distinct, consulta la Guía de distinción en el Manual de MongoDB Server.
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: