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

MongoDB聚合无需$unwind和$group实现数组内重复age对应score求和

报错原因

你遇到的报错核心是原有逻辑中$$value是$reduce迭代过程中累计的数组对象,直接访问$$value.score会返回数组类型的结果,无法参与数值运算;同时原有逻辑只做了数组拼接,没有实现「更新已有同age条目分数」的逻辑,不符合需求。


正确聚合语句

db.collection.aggregate([
  {
    $addFields: {
      data: {
        $reduce: {
          input: "$data",
          initialValue: [],
          in: {
            $let: {
              vars: {
                // 查找累加数组中是否存在和当前条目age相同的记录
                existItem: {
                  $first: {
                    $filter: {
                      input: "$$value",
                      as: "item",
                      cond: { $eq: ["$$item.age", "$$this.age"] }
                    }
                  }
                }
              },
              in: {
                $cond: [
                  // 已存在同age的条目
                  { $ne: ["$$existItem", null] },
                  // 遍历累加数组,仅更新同age条目的score,其余字段保持不变
                  {
                    $map: {
                      input: "$$value",
                      as: "item",
                      in: {
                        $cond: [
                          { $eq: ["$$item.age", "$$this.age"] },
                          {
                            first: "$$item.first",
                            second: "$$item.second",
                            age: "$$item.age",
                            score: { $add: ["$$item.score", "$$this.score"] }
                          },
                          "$$item"
                        ]
                      }
                    }
                  },
                  // 不存在同age条目,直接追加当前条目到累加数组
                  { $concatArrays: ["$$value", ["$$this"]] }
                ]
              }
            }
          }
        }
      }
    }
  }
])

逻辑说明

  • 全程没有用到$unwind和$group操作符,完全符合要求
  • 通过$reduce遍历原data数组,每次迭代先检查累加数组中是否已存在相同age的条目
  • 存在同age条目时仅更新对应的score求和结果,first、second等其余字段完全保留
  • 不存在同age条目时直接追加当前条目到累加数组,最终输出的结构和你要求的预期结果完全一致

内容的提问来源于stack exchange,提问作者Jahanzaib Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:42:03