如何从数组中提取aggregation聚合结果,移除外层数组得到独立对象
聚合结果去除外层数组实现方案
该需求完全可以实现,常用的实现方式分为两类:
数据库聚合管道阶段直接处理
如果你使用的是MongoDB作为数据库,可以直接在现有聚合管道的末尾新增阶段,直接返回对象无需后续处理:
// 写法1:兼容多数MongoDB版本 { $replaceRoot: { newRoot: { $arrayElemAt: ["$$ROOT", 0] } } } // 写法2:MongoDB 4.4及以上版本可用,语法更简洁 { $replaceWith: { $first: "$$ROOT" } }
应用代码层处理
无论使用哪种数据库做聚合运算,都可以在拿到查询返回的数组后,直接提取第一个元素得到目标对象,不同语言的示例如下:
- JavaScript
const aggResult = [{total: 405.3, qtde: 20, p1: 264.5, p2: 15, p3: 125.8, p4: 0, p5: 0, p6: 0, p7: 0, p8: 0}] const targetObj = aggResult[0]
- Python
agg_result = [{"total": 405.3, "qtde": 20, "p1": 264.5, "p2": 15, "p3": 125.8, "p4": 0, "p5": 0, "p6": 0, "p7": 0, "p8": 0}] target_obj = agg_result[0]
- Java
// 假设聚合返回结果为List<Document>类型 List<Document> aggResult = mongoTemplate.aggregate(agg, "collectionName", Document.class).getMappedResults(); Document targetObj = aggResult.get(0);
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

