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

Encuentra un documento

Puede recuperar un solo documento en una colección encadenando find() y first() métodos en un objeto MongoCollection. Se puede pasar un filtro de query al método find() para consultar y retornar documentos que coincidan con el filtro en la colección. Si no incluyes un filtro, MongoDB devuelve todos los documentos de la colección.

Para obtener más información sobre cómo consultar MongoDB con el controlador de Kotlin, consulte nuestro guía sobre la consulta de documentos.

También puedes encadenar otros métodos al método find(), como sort(), que organiza los documentos coincidentes en un orden especificado, y projection(), que configura los campos incluidos en los documentos devueltos.

Para obtener más información sobre el método sort(), consulta nuestra guía sobre Ordenación. Para obtener más información sobre el método projection(), consulta nuestra guía sobre Proyecciones

El método find() devuelve una instancia de FindFlow, una clase que ofrece varios métodos para acceder, organizar y recorrer los resultados.

FindFlow también obtiene métodos de su interfaz delegada Flow de la biblioteca Kotlin Coroutines, como first() y firstOrNull(). El método firstOrNull() devuelve el primer documento de los resultados recuperados o null si no hay resultados. El método first() devuelve el primer documento o arroja una excepción NoSuchElementException si ningún documento coincide con la consulta.

Para obtener más información sobre cómo acceder a datos de un flujo con el controlador de Kotlin, consulta nuestra guía sobre Acceso a Datos Desde un Flujo.

El siguiente snippet encuentra un único documento de la colección movies. Utiliza los siguientes objetos y métodos:

  • Un filtro de query que se pasa al método find(). El filtro eq solo coincide con las películas cuyo título coincide exactamente con el texto "The Room".

  • Un tipo que organiza los documentos coincidentes en orden descendente por calificación, por lo que si nuestra query coincide con varios documentos, el documento devuelto será el que tenga la calificación más alta.

  • Una proyección que incluye los objetos de los campos title y imdb y excluye el campo _id utilizando el método auxiliar excludeId().

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.client.model.Filters.eq
import com.mongodb.client.model.Filters.lt
import com.mongodb.client.model.Projections
import com.mongodb.client.model.Sorts
import com.mongodb.kotlin.client.coroutine.MongoClient
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.runBlocking
import usageExamples.find.Results
data class Movie(val title: String, val runtime: Int, val imdb: IMDB) {
data class IMDB(val rating: Double)
}
data class Results(val title: String, val imdb: Movie.IMDB)
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")
val projectionFields= Projections.fields(
Projections.include(Movie::title.name, Movie::imdb.name),
Projections.excludeId()
)
val resultsFlow = collection.withDocumentClass<Results>()
.find(eq(Movie::title.name, "The Room"))
.projection(projectionFields)
.sort(Sorts.descending("${Movie::imdb.name}.${Movie.IMDB::rating.name}"))
.firstOrNull()
if (resultsFlow == null) {
println("No results found.");
} else {
println(resultsFlow)
}
mongoClient.close()
}

Para obtener información adicional sobre las clases y métodos mencionados en esta página, revisa la siguiente documentación API:

  • FindFlow

  • find()