文档菜单
文档首页
/ / /
Kotlin 协程

检索数据

本页面

  • 概述
  • 查找操作
  • 聚合操作

在本指南中,您可以了解如何从MongoDB数据库中检索数据。要检索数据,请使用读取操作。

读取操作允许您执行以下操作

  • 使用聚合操作对从您的集合中检索到的文档进行转换使用聚合操作监视数据库的实时更改

  • 使用聚合操作使用聚合操作使用

  • 使用聚合操作使用使用聚合操作使用

以下部分展示了油漆店老板如何管理他们的客户订单的示例。对于每个订单,老板都会记录颜色和数量,这对应于他们的paint_order集合中的colorqty字段colorqty字段在他们的paint_order集合中

{ "_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() 方法。此方法在集合中搜索与您提供的查询过滤器匹配的文档。有关如何指定查询的更多信息,请参阅我们的 指定查询 指南。

所有者想了解哪些订单包含大于三但小于九罐油漆,从他们的 paint_order 集合。

为了解决这个问题,所有者找到符合以下条件的订单

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)

所有者运行此查询后,他们找到了两个符合要求的订单。

有关如何构建过滤器的更多信息,请参阅我们的 过滤器构建器 指南。

有关可运行的 find() 示例,请参阅我们的 查找多个文档 页面。

使用聚合操作来执行聚合管道中的各个阶段。聚合管道是一个多阶段转换,产生聚合结果。

要执行聚合操作,请在 MongoCollection 实例上调用 aggregate() 方法。此方法接受一系列的聚合表达式。要执行聚合,您可以定义聚合阶段,指定如何匹配文档、重命名字段和分组值。有关更多信息,请参阅我们的 聚合 指南。

所有者想要知道哪种油漆颜色是最受欢迎的(销量最高)的,从他们的油漆订单集合中。

为了解决这个场景,所有者创建了一个聚合管道,

  • 匹配所有在 paint_order 集合中的文档

  • 按颜色分组订单

  • 按颜色汇总数量字段

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

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=8, color=green)
PaintOrder(id=3, qty=4, color=purple)

在所有者运行聚合后,他们发现“绿色”是最受欢迎的颜色。

有关如何构建聚合管道的更多信息,请参阅MongoDB服务器手册中的聚合页面。

有关此页面上提到的方法的更多信息,请参阅以下API文档

下一页

MongoDB Kotlin驱动程序