Puede recuperar un solo documento en una colección encadenando los find() y los métodos first() en un objeto MongoCollection. Puede pasar un filtro de consulta al método find() para consultar y devolver los documentos que coincidan con el filtro en la colección. Si no incluye 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 Kotlin, consulte nuestra Guía sobre la consulta de documentos.
También puede encadenar otros métodos al método find(), como sort(), que organiza los documentos coincidentes en un orden específico, y projection(), que configura los campos incluidos en los documentos devueltos.
Para más información sobre el sort() método, consulte nuestra guía sobre Ordenación. Para más información sobre el projection() método, consulte 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 los datos de un flujo con el controlador Kotlin, consulte nuestra guía sobre cómo acceder a los datos desde un flujo.
Ejemplo
El siguiente snippet encuentra un único documento de la colección movies. Utiliza los siguientes objetos y métodos:
Un filtro de consulta que se pasa al
find()método. Eleqfiltro solo encuentra películas cuyo título coincida exactamente con el"The Room"texto.Una clasificación que organiza los documentos coincidentes en orden descendente por calificación, de modo que si nuestra consulta coincide con varios documentos, el documento devuelto es el que tiene la calificación más alta.
Una proyección que incluye los objetos en los campos
titleimdby y excluye el_idcampo utilizando el métodoexcludeId()auxiliar.
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.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, consulte la siguiente documentación de API: