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 únicos de un campo

Puedes recuperar una lista de valores distintos para un campo en toda una colección llamando al método distinct() en un objeto MongoCollection. Pasa el nombre del campo del documento como primer parámetro y la clase a la que deseas transformar 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, la cual contiene métodos para acceder, organizar y recorrer los resultados. DistinctFlow delega en la interfaz Flow de la librería Kotlin Coroutines, permitiendo el acceso a métodos como first() y firstOrNull().

Para obtener más información, consulta nuestra guía sobre el acceso a datos de 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, consulta los siguientes recursos: