You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 17:06:11