如何在MongoDB中合并多文档并将字段值转换为键名
解决方案
方法1:在MongoDB聚合管道内直接转换
你可以在现有聚合管道的末尾追加2个阶段,直接在数据库侧生成目标格式的返回结果:
// 追加到现有聚合管道的末尾 { $group: { _id: null, kvPairs: { $push: { k: "$_id", v: "$count" } } } }, { $replaceRoot: { newRoot: { $arrayToObject: "$kvPairs" } } }
逻辑说明:
- 新增的
$group阶段会把所有原始聚合结果收拢到同一个分组中,将每条数据的_id作为键、count作为值,组装成键值对数组 - 后续的
$replaceRoot阶段会调用$arrayToObject运算符把键值对数组转换为对象,直接作为根级返回结果,输出就是你需要的格式。
方法2:在应用层对聚合结果做二次转换
如果你不想修改原有聚合逻辑,也可以在拿到原始聚合数组后通过代码转换,以JavaScript为例:
// 原始聚合返回结果 const originResult = [ { _id: 'Complex Numbers', count: 2 }, { _id: 'Calculus', count: 1 } ] // 转换为目标格式 const targetResult = Object.fromEntries(originResult.map(item => [item._id, item.count]))
内容的提问来源于stack exchange,提问作者H.B.
相关产品推荐
相关产品推荐

