Acessar dados de um fluxo
Nesta página
Visão geral
Neste guia, você pode aprender como acessar dados usando um Flow
com o driver MongoDB Kotlin.
Um Flow
é um tipo de dados incorporado às corrotina Kotlin que representam um fluxo de valores que estão sendo calculados de forma assíncrona. O driver de corrotina do Kotlin usa fluxos para representar os resultados das operações de leitura de reconhecimento de data center.
Esta página utiliza um método de iniciação, find()
para mostrar como acessar dados de um FindFlow.
Observação
As seguintes formas de acessar e armazenar dados se aplicam a outros iteráveis, como um AggregateFlow.
O método find()
cria e retorna uma instância de um FindFlow
. Um FindFlow
permite que você navegue pelos documentos correspondentes aos seus critérios do Atlas Search e especifique ainda mais quais documentos ver, definindo parâmetros por meio de métodos.
Métodos de terminal
Os métodos de terminal executam uma operação no servidor MongoDB após configurar todos os parâmetros de uma instância do Flow
que controla a operação.
Encontre o primeiro documento
Utilize o método firstOrNull()
para recuperar o primeiro documento nos resultados da sua query ou null
se não houver resultados:
val resultsFlow = collection.find() val firstResultOrNull = resultsFlow.firstOrNull()
Como alternativa, você pode usar o método first()
para recuperar o primeiro documento na sua query ou lançar um NoSuchElementException
se não houver resultados:
try { val resultsFlow = collection.find() val firstResult = resultsFlow.first() } catch (e: NoSuchElementException) { println("No results found") }
Esses métodos geralmente são usados quando o filtro de query corresponde a um documento, como ao filtrar por um índice único.
Contagem de números de resultados
Utilize o método count()
para recuperar o número de resultados na query:
val resultsFlow = collection.find() val count = resultsFlow.count()
Converter resultados em uma lista
Utilize o método toList()
para armazenar os resultados da query em um List
:
val resultsFlow = collection.find() val results = resultsFlow.toList()
Esse método geralmente é usado quando o filtro de query retorna um pequeno número de documentos que cabem na memória disponível.
Iterar por meio de resultados
Use o método collect()
para iterar os documentos buscados e garantir que o fluxo seja fechado em caso de encerramento antecipado:
val resultsFlow = collection.find() resultsFlow.collect { println(it) }
Explicar a query
Use o método explain()
para visualizar informações sobre como o MongoDB executa sua operação.
O método explain()
retorna planos de execução e estatísticas de desempenho. Um plano de execução é uma maneira em potencial de o MongoDB concluir uma operação. O método explain()
fornece ambos o plano vencedor (o plano do MongoDB executado) e planos rejeitados.
Você pode especificar o nível de detalhes da sua explicação passando um nível de detalhamento para o método explain()
.
A tabela a seguir mostra todos os níveis de detalhamento para explicações e seus casos de uso pretendidos:
Nível de verbosidade | Caso de uso |
---|---|
ALL_PLANS_EXECUTIONS | Você deseja saber qual plano o MongoDB escolherá para executar sua query. |
EXECUTION_STATS | Você quer saber se sua query está tendo um bom desempenho. |
QUERY_PLANNER | Você tem um problema com sua query e deseja o máximo de informações possível para diagnosticar o problema. |
O exemplo a seguir imprime a representação JSON do plano vencedor para estágios de agregação que produzem planos de execução:
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 obter mais informações sobre a operação de explicação, consulte as seguintes entradas manuais do servidor:
Para obter mais informações sobre os métodos e as classes mencionadas nesta seção, consulte a seguinte documentação da API: