Menu Docs
Página inicial do Docs
/ / /
Kotlin Coroutine
/ / /

Acessar dados de um fluxo

Nesta página

  • Visão geral
  • Métodos de terminal
  • Encontre o primeiro documento
  • Contagem de números de resultados
  • Converter resultados em uma lista
  • Iterar por meio de resultados
  • Explicar a query

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.

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.

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.

Utilize o método count() para recuperar o número de resultados na query:

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

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.

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) }

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:

Voltar

Retrieve Data