使用聚合转换您的数据
概述
在本指南中,您可以了解如何使用 Kotlin 同步驱动程序执行 聚合操作。
您可以使用聚合操作来处理 MongoDB 集合中的数据,并返回计算结果。MongoDB 聚合框架是查询 API 的一部分,它基于数据处理管道的概念。文档进入一个包含一个或多个阶段的管道,每个阶段都转换文档以输出最终的聚合结果。
您可以将聚合操作视为类似于汽车工厂。汽车工厂有一条装配线,其中包含装配站和专用工具,用于执行特定的工作,如钻孔和焊接。原材料进入工厂,然后装配线将其转换和组装成成品。
聚合管道 是装配线,聚合阶段 是装配站,而 运算符表达式 是专用工具。
比较聚合操作和查找操作
您可以使用查找操作执行以下操作
选择要返回的文档
选择要返回的字段
排序结果
您可以使用聚合操作执行以下操作
执行查找操作
重命名字段
计算字段
汇总数据
分组值
限制
使用聚合操作时,以下限制适用
返回的文档不得违反BSON文档大小限制为16兆字节。
默认情况下,管道阶段具有100兆字节的内存限制。您可以通过使用
allowDiskUse()
方法从AggregateIterable
类来超过此限制。
重要
$graphLookup异常
具有严格100兆字节内存限制的$graphLookup
阶段会忽略allowDiskUse
选项。
聚合示例
本节中的示例使用来自Atlas样本数据集的sample_restaurants
数据库中的restaurants
集合。要了解如何创建免费的MongoDB Atlas集群并加载样本数据集,请参阅使用Atlas入门指南。
以下Kotlin数据类模型表示此集合中的文档
data class Restaurant( val name: String, val cuisine: String, val borough: String )
构建并执行聚合管道
要对集合中的文档进行聚合,请将聚合阶段列表传递给aggregate()
方法。
以下示例输出纽约市每个区面包店的数量。以下代码创建了一个包含以下阶段的聚合管道:
val pipeline = listOf( Aggregates.match(Filters.eq(Restaurant::cuisine.name, "Bakery")), Aggregates.group("\$borough", Accumulators.sum("count", 1)) ) val results = collection.aggregate<Document>(pipeline) results.forEach { result -> println(result) }
Document{{_id=Bronx, count=71}} Document{{_id=Manhattan, count=221}} Document{{_id=Brooklyn, count=173}} Document{{_id=Queens, count=204}} Document{{_id=Staten Island, count=20}} Document{{_id=Missing, count=2}}
提示
在指定 $group
聚合阶段的分组键时,请确保使用反斜杠字符(\)转义任何 $
字符。
解释聚合
要查看 MongoDB 执行操作的信息,您可以在管道中包含 $explain
聚合阶段。当 MongoDB 解释一个操作时,它返回 执行计划 和性能统计信息。执行计划是 MongoDB 完成操作的可能方式之一。当您指示 MongoDB 解释操作时,它将返回为操作选择的计划以及任何被拒绝的执行计划。
以下代码示例运行了前面部分中显示的相同聚合操作,并添加了 $explain
阶段以输出操作细节
print(collection.aggregate(pipeline).explain())
{ "explainVersion": "2", "queryPlanner": { "namespace": "sample_restaurants.restaurants" "indexFilterSet": false, "parsedQuery": { "cuisine": {"$eq": "Bakery"} }, "queryHash": "865F14C3", "planCacheKey": "0697561B", "optimizedPipeline": true, "maxIndexedOrSolutionsReached": false, "maxIndexedAndSolutionsReached": false, "maxScansToExplodeReached": false, "winningPlan": { ... } ... } ... }
更多信息
要查看表达式运算符的完整列表,请参阅 MongoDB 服务器手册中的 聚合运算符。
要了解如何组装聚合管道并查看示例,请参阅 MongoDB 服务器手册中的 聚合管道。
要了解更多关于创建管道阶段的信息,请参阅 MongoDB 服务器手册中的 聚合阶段。
要了解更多关于解释MongoDB操作的信息,请参阅MongoDB服务器手册中的Explain输出和查询计划。
API文档
有关使用Kotlin Sync驱动程序执行聚合操作的更多信息,请参阅以下API文档