Overview
En esta guía, puedes aprender cómo usar el controlador de Kotlin para recuperar datos de una colección de MongoDB mediante las operaciones de lectura. Puedes llamar al método find() para recuperar documentos que coincidan con un conjunto de criterios especificados en un filtro de query.
Datos de muestra
Los ejemplos de esta guía utilizan la colección movies en la base de datos sample_mflix de los conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de ejemplo, consulta la Guía de inicio.
La siguiente clase de datos de Kotlin modela los documentos de esta colección:
data class Movie(val title: String, val runtime: Int, val imdb: IMDB){ data class IMDB(val rating: Double) }
La siguiente clase de datos Kotlin modela los resultados devueltos por los ejemplos en esta guía:
data class Results(val title: String)
Encontrar operación
El método find() recupera documentos de una colección. Este método toma un filtro de query y devuelve todos los documentos coincidentes. Un filtro de query es un documento que especifica los criterios que el driver utiliza para cotejar documentos de la colección.
Para obtener más información sobre los filtros de query, consulta la guía Especificar una consulta.
Encontrar un documento Ejemplo
El siguiente ejemplo encadena el método firstOrNull() con la llamada al método find() para encontrar el primer documento en el que el valor del campo name es "The Room":
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) .firstOrNull() if (resultsFlow == null) { println("No results found."); } else { println(resultsFlow) }
Movie(title=The Room, runtime=99, imdb=IMDB(rating=3.7))
Ejemplo de búsqueda de documentos
Este ejemplo utiliza el método find() para encontrar todos los documentos en los que el valor del campo runtime es menor que 15. La operación find() devuelve un objeto FindFlow, que puedes iterar utilizando el método collect(), como se muestra en el siguiente ejemplo:
val projectionFields= Projections.fields( Projections.include(Movie::title.name, Movie::imdb.name), Projections.excludeId() ) val resultsFlow = collection.withDocumentClass<Results>() .find(lt(Movie::runtime.name, 15)) .projection(projectionFields) resultsFlow.collect { println(it) }
Movie(title=Meshes of the Afternoon, runtime=14, imdb=IMDB(rating=8.0)) Movie(title=The Band Concert, runtime=9, imdb=IMDB(rating=7.9)) Movie(title=What's Opera, Doc?, runtime=7, imdb=IMDB(rating=8.3)) ...
Nota
Encuentre todos los documentos
Para encontrar todos los documentos en una colección, pasa un filtro vacío al método find():
val resultsFlow = collection.withDocumentClass<Results>() .find()
Modificar el comportamiento de búsqueda
Puedes modificar el comportamiento del método find() encadenando métodos a una instancia FindFlow. La siguiente tabla describe los métodos comúnmente utilizados para modificar consultas:
Método | Descripción |
|---|---|
| Limita el número de documentos a devolver por agrupar. El valor por defecto es Para aprender más sobre el tamaño del lote, consulte cursor.batchSize() en el manual de MongoDB Server. |
| Establece las opciones de intercalación para la consulta. |
| Procesa cada elemento del flujo y aplica la Lambda dada. |
| Especifica una cadena de texto que se adjuntará a la consulta. Esto puede ayudarle a rastrear e interpretar la operación en los registros del servidor y en los datos de perfil. |
| Devuelve el primer documento que coincide con la consulta o lanza un |
| Devuelve el primer documento que coincide con la consulta o |
| Especifica el índice que se utilizará para la query. |
| Limita el número de document que se devolverán de la query. |
| Establece el número de documentos a omitir. |
| Define los criterios de ordenación que se aplicarán a la query. |
El siguiente ejemplo encadena el método limit() para limitar el número de documentos devueltos por la query a 10:
val projectionFields= Projections.fields( Projections.include(Movie::title.name, Movie::imdb.name), Projections.excludeId() ) val resultsFlow = collection.withDocumentClass<Results>() .find() .projection(projectionFields) .limit(10)
Para ver una lista completa de métodos que modifican el comportamiento de find(), consulta la FindFlow clase en la documentación de la API del controlador de Kotlin.
Información Adicional
Para más información sobre los filtros de query, consultar Especificar una query.
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: