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
/ /

Acceder a los datos desde un flujo

En esta guía, puedes aprender cómo acceder a datos utilizando un Flow con el controlador de MongoDB Kotlin.

Un Flow es un tipo de dato integrado en las corrutinas de Kotlin que representa una secuencia de valores que se están calculando de forma asincrónica. El driver de corrutinas de Kotlin utiliza flujos para representar los resultados de las operaciones de lectura de bases 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ón Cursores 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.

Usa el método firstOrNull() para recuperar el primer documento en los resultados de tu query 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 suelen utilizarse cuando el filtro de consulta coincide con un documento, por ejemplo, al filtrar 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()

Usa el método toList() para almacenar los resultados de las consultas en un List:

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

Este método se usa a menudo cuando tu filtro de query devuelve un pequeño número de documentos que pueden caber en la memoria disponible.

Usa el método collect() para iterar a través de los documentos recuperados y asegura que el flujo se cierre si hay una terminació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 método explain() devuelve planes de ejecución y estadísticas de rendimiento. Un plan de ejecución es una forma potencial en la que MongoDB puede completar una operación. El método explain() ofrece tanto el plan ganador (el plan ejecutado por MongoDB) como los planes rechazados.

Puedes especificar el nivel de detalle de tu 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.

EXECUTION_STATS

Tu quieres saber si tu query está funcionando bien.

QUERY_PLANNER

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 con seguimiento, consulta la guía de Cursores con seguimiento en el manual del servidor de MongoDB.

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

Volver

Cuenta los valores distintos de campo

En esta página