从流程访问数据
Overview
在本指南中,您可以了解如何使用 Flow
和 MongoDB Kotlin 驱动程序访问数据。
Flow
是 Kotlin 协程中内置的一种数据类型,表示异步计算的值流。 Kotlin 协程驱动程序使用流来表示数据库读取操作的结果。
This page uses an initiating method,find()
to show how to 访问权限 data from a FindFlow.
注意
以下访问和存储数据的方法适用于其他迭代,例如 AggregateFlow。
find()
方法创建并返回FindFlow
的实例。 FindFlow
允许您浏览与Atlas Search条件匹配的文档,并通过方法设置参数来进一步指定要查看的文档。
终端方法
配置控制操作的Flow
实例的所有参数后,终端方法在 MongoDB Server 上执行操作。
查找第一个文档
使用firstOrNull()
方法检索查询结果中的第一个文档;如果没有结果,则使用null
:
val resultsFlow = collection.find() val firstResultOrNull = resultsFlow.firstOrNull()
或者,您可以使用first()
方法检索查询中的第一个文档;如果没有结果,则抛出NoSuchElementException
:
try { val resultsFlow = collection.find() val firstResult = resultsFlow.first() } catch (e: NoSuchElementException) { println("No results found") }
当查询筛选器将匹配一个文档时(例如按唯一索引进行筛选时),通常会使用这些方法。
计算结果数
使用count()
方法检索查询中的结果数:
val resultsFlow = collection.find() val count = resultsFlow.count()
将结果转换为列表
使用toList()
方法将查询结果存储在List
中:
val resultsFlow = collection.find() val results = resultsFlow.toList()
当查询筛选器返回少量可容纳在可用内存中的文档时,通常会使用此方法。
遍历结果
使用collect()
方法遍历获取的文档,并确保流程在提前终止时关闭:
val resultsFlow = collection.find() resultsFlow.collect { println(it) }
解释查询
使用explain()
方法查看有关 MongoDB 如何执行操作的信息。
explain()
方法会返回执行计划和性能统计信息。 执行计划是 MongoDB 完成操作的一种潜在方式。 explain()
方法提供获胜计划(MongoDB 执行的计划)和被拒绝的计划。
您可以通过将详细程度传递给 explain()
方法来指定说明的详细程度。
下表显示了说明的所有详细级别及其预计使用案例:
详细程度 | 用例(Use Case) |
---|---|
ALL_PLANS_EXECUTIONS | 你想知道 MongoDB 会选择哪个计划来运行查询。 |
EXECUTION_STATS | 您想知道您的查询是否表现良好。 |
QUERY_PLANNER | 您的查询有问题,需要尽可能多的信息来诊断问题。 |
以下示例打印生成执行计划的聚合阶段的获胜计划的 JSON 表示形式:
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" }
有关解释操作的更多信息,请参阅以下服务器手册条目:
有关本节中提到的方法和类的详情,请参阅以下 API 文档: