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
/ /

Recuperar valores distintos de un campo

Puedes recuperar una lista de valores distintos para un campo en una colección llamando a la distinct() método en un objeto MongoCollection. Pasa el nombre del campo del documento como el primer parámetro y la clase a la que deseas convertir los resultados como el parámetro de tipo.

Los siguientes fragmentos demuestran el método distinct() usando la colección movies en la base de datos de ejemplo sample_mflix. Los documentos se modelan con la siguiente clase de datos de Kotlin:

data class Movie(
val type: String,
val languages: List<String>,
val countries: List<String>,
val awards: Awards){
data class Awards(val wins: Int)
}

La siguiente llamada al método devuelve cada valor distinto del campo countries en la colección movies:

collection.distinct<String>(Movie::countries.name)

Puedes especificar un campo en el documento o uno dentro de un documento incrustado usando la notación de punto. La siguiente llamada de método devuelve cada valor distinto del campo wins en el documento incrustado awards:

collection.distinct<Int>("${Movie::awards.name}.${Movie.Awards::wins.name}")

También puede limitar el conjunto de documentos de los que su instancia de MongoDB recupera valores distintos mediante un filtro de query como segundo parámetro, de la siguiente manera:

collection.distinct<String>(Movie::type.name, Filters.eq(Movie::languages.name, "French"))

El método distinct() devuelve un objeto que implementa la clase DistinctFlow, que contiene métodos para acceder, organizar y recorrer los resultados. DistinctFlow delega a la interfaz Flow desde la biblioteca Kotlin Coroutines, lo que permite el acceso a métodos como first() y firstOrNull().

Para obtener más información, consulta nuestro Guía sobre cómo acceder a datos desde un flujo.

El siguiente ejemplo recupera una lista de valores distintos para el campo year del documento de la colección movies. Utiliza un filtro de query para hacer coincidir películas que incluyan "Carl Franklin" como uno de los valores en el arreglo directors.

Cuando ejecutes el ejemplo, deberías ver una salida que informe cada año distinto de todas las películas en las que Carl Franklin figuró como director.

Nota

Este ejemplo se conecta a una instancia de MongoDB mediante un URI de conexión. Para saber más sobre cómo conectarse a su instancia de MongoDB, consulte la guía de conexión.

import com.mongodb.MongoException
import com.mongodb.client.model.Filters
import com.mongodb.kotlin.client.coroutine.MongoClient
import kotlinx.coroutines.runBlocking
data class Movie(val year: Int, val directors: List<String>)
fun main() = runBlocking {
// Replace the uri string with your MongoDB deployment's connection string
val uri = "<connection string uri>"
val mongoClient = MongoClient.create(uri)
val database = mongoClient.getDatabase("sample_mflix")
val collection = database.getCollection<Movie>("movies")
try {
val resultsFlow = collection.distinct<Int>(
Movie::year.name, Filters.eq(Movie::directors.name, "Carl Franklin")
)
resultsFlow.collect { println(it) }
} catch (e: MongoException) {
System.err.println("An error occurred: $e")
}
mongoClient.close()
}
1992
1995
1998
...

Para obtener información adicional sobre las clases y métodos mencionados en esta página, consulte los siguientes recursos:

  • distinct() Documentación de la API

  • distinctFlow Documentación de la API

  • Entrada manual del servidor denotación de puntos

Volver

Contabilizar documentos