Docs Menu
Docs Home
/ /

Acceder a los datos desde un flujo

En esta guía, puede aprender cómo acceder a los datos mediante un Flow con el controlador MongoDB Kotlin.

Un Flow es un tipo de dato integrado en las corrutinas de Kotlin que representa un flujo de valores que se calculan de forma asíncrona. El controlador de corrutinas de Kotlin utiliza flujos para representar los resultados de las operaciones de lectura de la base de datos.

Esta página utiliza un método de inicio, find(), para mostrar cómo acceder a los datos desde un EncuentraFlow.

Nota

Las siguientes formas de acceder a los datos y almacenarlos se aplican a otros iterables, como un AggregateFlow.

El método find() crea y devuelve una instancia de FindFlow. Un FindFlow permite explorar los documentos que coinciden con los criterios de búsqueda y especificar qué documentos ver mediante la configuración de parámetros mediante métodos.

Tip

Tiempo de espera de flujo

Puedes establecer un tiempo de espera en tu flujo para devolver los resultados de la consulta. Para obtener más información, consulta SecciónCursores de la guía Limitar el tiempo de ejecución del servidor.

Los métodos terminal ejecutan una operación en el servidor de MongoDB después de configurar todos los parámetros de una instancia de Flow que controla la operación.

Utilice el método firstOrNull() para recuperar el primer documento en los resultados de su consulta o null si no hay resultados:

val resultsFlow = collection.find()
val firstResultOrNull = resultsFlow.firstOrNull()

Alternativamente, puede utilizar el método first() para recuperar el primer documento en su consulta o lanzar un NoSuchElementException si no hay resultados:

try {
val resultsFlow = collection.find()
val firstResult = resultsFlow.first()
} catch (e: NoSuchElementException) {
println("No results found")
}

Estos métodos se utilizan a menudo cuando el filtro de consulta coincidirá con un documento, como cuando se filtra por un índice único.

Utilice el método count() para recuperar el número de resultados en la consulta:

val resultsFlow = collection.find()
val count = resultsFlow.count()

Utilice el método toList() para almacenar los resultados de su consulta en un List:

val resultsFlow = collection.find()
val results = resultsFlow.toList()

Este método se utiliza a menudo cuando el filtro de consulta devuelve una pequeña cantidad de documentos que pueden caber en la memoria disponible.

Utilice el método collect() para iterar a través de los documentos obtenidos y asegurarse de que el flujo se cierre si hay una finalización anticipada:

val resultsFlow = collection.find()
resultsFlow.collect { println(it) }

Utilice el método explain() para ver información sobre cómo MongoDB ejecuta su operación.

El explain() método devuelve planes de ejecución y estadísticas de rendimiento. Un plan de ejecución es una forma posible de que MongoDB complete una operación. El explain() método proporciona tanto el plan ganador (el plan ejecutado por MongoDB) como los planes rechazados.

Puede especificar el nivel de detalle de su explicación pasando un nivel de verbosidad al método explain().

La siguiente tabla muestra todos los niveles de verbosidad para las explicaciones y sus casos de uso previstos:

Nivel de verbosidad
Caso de uso

TODAS LAS EJECUCIONES DE LOS PLANES

Desea saber qué plan elegirá MongoDB para ejecutar su consulta.

ESTADÍSTICAS DE EJECUCIÓN

Quiere saber si su consulta está funcionando bien.

PLANIFICADOR DE CONSULTAS

Tienes un problema con tu query y quieres la mayor cantidad de información posible para diagnosticar el problema.

El siguiente ejemplo imprime la representación JSON del plan ganador para las etapas de agregación que producen planes de ejecución:

val explanation = collection.find().explain(ExplainVerbosity.EXECUTION_STATS)
val jsonSummary = explanation.getEmbedded(
listOf("queryPlanner", "winningPlan"),
Document::class.java
).toJson()
println(jsonSummary)
{ "stage": "COLLSCAN", "direction": "forward" }

Para obtener más información sobre la operación explicar, consulta las siguientes entradas del Manual del servidor:

Al hacer una consulta en una colección con tamaño fijo, puedes usar un cursor con seguimiento que permanezca abierto después de que el cliente agote los resultados en un cursor. Para crear un cursor con seguimiento con una colección con tamaño fijo, indica CursorType.TailableAwait en la opción cursorType de un método find().

El siguiente ejemplo utiliza un cursor con seguimiento para rastrear una colección con tamaño fijo e imprimir los documentos. Como el Flow está respaldado por un cursor con seguimiento que permanece abierto, el cursor con seguimiento agrega nuevos resultados al Flow cuando se añaden documentos a la colección.

val results = collection.find<Document>().cursorType(CursorType.TailableAwait)
results.collect { document ->
println("Document: $document")
}

Para obtener más información sobre los cursores adaptables, consulte la guía Cursores adaptables en el manual del servidor MongoDB.

Para obtener más información sobre los métodos y clases mencionados en esta sección, consulte la siguiente documentación de API:

Volver

Contar valores de campos distintos

En esta página