MongoDB聚合中动态键accuracy值累加问题求助
实现MongoDB动态键accuracy值的累加
针对动态键值的累加需求,可通过以下聚合管道实现:
db.getCollection('statistics').aggregate([ // 将accuracy对象转换为键值对数组,统一处理动态键 { $addFields: { accuracyEntries: { $objectToArray: "$accuracy" } } }, // 展开键值对数组,使每个键值对成为独立文档 { $unwind: "$accuracyEntries" }, // 按键名分组,累加对应数值 { $group: { _id: "$accuracyEntries.k", total: { $sum: "$accuracyEntries.v" } } }, // 将所有键值对结果收集为数组 { $group: { _id: null, accuracy: { $push: { k: "$_id", v: "$total" } } } }, // 将数组转换回对象结构,得到最终累加结果 { $project: { _id: 0, accuracy: { $arrayToObject: "$accuracy" } } } ])
步骤说明:
- $objectToArray:把每个文档中
accuracy的动态键对象转换为[{k: "键名", v: "数值"}]格式的数组,解决动态键无法直接分组的问题 - $unwind:展开上述数组,让每个键值对单独成为一条文档,为后续分组累加做准备
- $group(第一次):以键名(
k字段)为分组依据,使用$sum累加对应数值 - $group(第二次):将所有分组后的键值对收集到一个数组中,方便后续转换回对象
- $arrayToObject:把键值对数组重新转换为对象结构,还原成你需要的
accuracy格式
针对你提供的示例数据,运行后会得到结果:
{ "accuracy" : { "low" : 10 } }
内容的提问来源于stack exchange,提问作者Zoumath
相关产品推荐
相关产品推荐

