Docs 菜单
Docs 主页
/ / /
Kotlin 协程

从流程访问数据

在此页面上

  • 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 文档:

来年

MongoDB Kotlin 驱动程序