如何用MongoDB聚合将分组结果动态合并为指定结构文档?
MongoDB聚合实现指定结构合并方案
你可以通过多阶段的$group配合$arrayToObject操作来动态完成这个合并,具体聚合管道如下:
db.collection.aggregate([ // 按region和business分组,收集对应国家列表 { $group: { _id: { region: "$region", business: "$business" }, countries: { $addToSet: "$country" } // 如需保留重复国家,替换为$push } }, // 按region分组,整理business数组结构 { $group: { _id: "$_id.region", business: { $push: { $arrayToObject: [[{ k: "$_id.business", v: "$countries" }]] } } } }, // 重命名字段,得到最终目标结构 { $project: { _id: 0, region: "$_id", business: 1 } } ])
各阶段说明:
- 第一阶段
$group:将相同region和business的记录合并,把对应的country值收集为数组。使用$addToSet可自动去重,若业务允许重复国家,换成$push即可。 - 第二阶段
$group:以region为维度再次合并,通过$arrayToObject将business名称和对应国家数组转换为{业务名称: [国家列表]}的对象,再用$push把这些对象存入business数组。 - 第三阶段
$project:将默认的_id字段重命名为region,并移除原_id,输出符合要求的结构。
内容的提问来源于stack exchange,提问作者m.y.m
相关产品推荐
相关产品推荐

