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

如何在MongoDB的aggregate group阶段新增sector数组字段?

解决方案

你可以使用MongoDB聚合的$addToSet累加器实现需求,不需要修改原有分组维度,也不会破坏现有统计逻辑,修改后的聚合代码如下:

await Escaneado.aggregate([  
  {
    $match: {
      $and: [
        { "gestion": id },
        { "disponible": true }
      ] 
    },
  },    
  {
    $group: {
      _id: { 
        code:"$codigo",
        quantityTarget:"$cantidadObjetivo",
      },
      quantityTotalScanded : { $sum: "$cantidad" },
      // 新增:收集当前分组下所有不重复的sector值
      tmpSectors: { $addToSet: "$sector" }
    }
  },
  {
    $addFields:{
      difference:{ $subtract: ["$quantityTotalScanded", "$_id.quantityTarget"]},
      // 将收集到的sector数组放到_id对象中
      "_id.sector": "$tmpSectors"
    }
  },
  // 可选:如果不需要保留临时的tmpSectors字段,可以加这一步移除
  {
    $project: {
      tmpSectors: 0
    }
  }
])

逻辑说明

  • $addToSet 是分组阶段专用的累加器,会自动对同一个分组内的指定字段值去重后存入数组,完全不影响原有按code和quantityTarget分组的逻辑,原有的数量求和统计也不会发生变化。
  • 之后通过$addFields直接给_id对象新增sector属性,赋值为收集好的去重数组,即可匹配你需要的输出结构。

如果你的原始文档中sector本身就是数组类型,只需要把$addToSet: "$sector"替换为$addToSet: { $each: "$sector" }即可实现数组元素层级的去重收集。

内容的提问来源于stack exchange,提问作者A V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:45:00