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

Retrieve Data

在本指南中,您可以学习;了解如何使用Kotlin驾驶员从MongoDB 数据库检索数据。您可以执行读取操作,从MongoDB检索数据。

读取操作启用您能够执行以下任务:

  • 使用查找操作从集合中检索文档子集

  • 使用聚合操作对从集合中检索到的文档执行转换

  • 使用变更流监控数据库的实时更改

以下部分的示例演示如何管理罐装油漆的客户订单。对于每个订单,您都需要追踪颜色和数量,它们与 orders集合中文档中的 colorqty 字段相对应:

{ "_id": 1, "color": "purple", "qty": 10 }
{ "_id": 2, "color": "green", "qty": 8 }
{ "_id": 3, "color": "purple", "qty": 4 }
{ "_id": 4, "color": "green", "qty": 11 }

该数据由以下Kotlin数据类进行建模:

data class PaintOrder(
@BsonId val id: Int,
val qty: Int,
val color: String
)

使用查找操作检索 MongoDB 中现有数据的子集。您可以指定要返回哪些数据,包括要检索哪些文档、以什么顺序检索它们以及要检索多少个文档。

要执行查找操作,请对 MongoCollection 的实例调用 find() 方法。此方法在集合搜索与您提供的查询过滤相匹配的文档。有关如何指定查询的更多信息,请参阅“指定查询”指南。

您想知道哪些订单包含大于 3 但小于 9 罐的油漆。

运行以下代码以查找符合条件的订单:

val filter = Filters.and(Filters.gt("qty", 3), Filters.lt("qty", 9))
val resultsFlow = collection.find(filter)
resultsFlow.collect { println(it) }
PaintOrder(id=2, qty=8, color=green)
PaintOrder(id=3, qty=4, color=purple)

要学习;了解有关 Filters 构建器的详情,请参阅 过滤器构建器 指南。

要查看可运行的find() 示例,请参阅“查找多个文档”用法示例。

使用聚合操作对数据运行聚合管道。聚合管道是产生聚合结果的多阶段转换。

要执行聚合操作,请在 MongoCollection 的实例上调用 aggregate() 方法。此方法接受聚合表达式以按顺序运行。要执行聚合,您可以定义聚合阶段来指定如何匹配文档、重命名字段和对值群组。要学习;了解更多信息,请参阅 聚合指南。

您想通过查找购买次数最多的颜色来了解哪种油漆颜色最受欢迎。

您可以创建执行以下操作的聚合管道:

  • 匹配 orders 集合中的所有文档

  • 按颜色分组订单

  • 按颜色汇总数量字段

  • 将结果按数量从高到低排序

data class AggregationResult(@BsonId val id: String, val qty: Int)
val filter = Filters.empty()
val pipeline = listOf(
Aggregates.match(filter),
Aggregates.group(
"\$color",
Accumulators.sum("qty", "\$qty")
),
Aggregates.sort(Sorts.descending("qty"))
)
val resultsFlow = collection.aggregate<AggregationResult>(pipeline)
resultsFlow.collect { println(it) }
PaintOrder(id=2, qty=19, color=green)
PaintOrder(id=3, qty=14, color=purple)

要学习;了解有关构建聚合管道的更多信息,请参阅服务器手册中的聚合

要学习;了解有关此页面上提到的方法的更多信息,请参阅以下API文档:

后退

读取

在此页面上