Docs Menu
Docs Home
/ /

Recuperar valores distintos de un campo

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

Los siguientes fragmentos muestran el método distinct() utilizando 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 cuales su instancia de MongoDB recupera valores distintos con un filtro de consulta 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, vea nuestro Guía sobre cómo acceder a datos desde un flujo.

El siguiente ejemplo recupera una lista de valores distintos para el campo de documento year de la colección movies. Utiliza un filtro de consulta para encontrar películas que incluyan "Carl Franklin" como uno de los valores de la matriz directors.

Al ejecutar el ejemplo, debería ver un resultado que informa cada año distinto para todas las películas en las que Carl Franklin fue director.

Nota

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

  • Documentación de la APIdistinct()

  • Documentación de la API dedistinctFlow

  • Entrada manual del servidor denotación de puntos

Volver

Contabilizar documentos