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

MongoDB $group聚合不使用$accumulator合并同天多电表小时耗量数组方法

可以实现,无需使用$accumulator,仅通过MongoDB内置的基础聚合算子即可完成需求,核心逻辑是按日期分组后将同小时维度的数值对齐后逐位求和,具体聚合管道如下:

db.collection.aggregate([
  // 按日期分组,收集同日期所有电表的小时耗量数组
  {
    $group: {
      _id: "$date",
      allMeterHourly: { $push: "$hourlyConsumption" }
    }
  },
  // 按小时索引对齐,逐位求和得到合并后的总耗量数组
  {
    $project: {
      _id: 0,
      date: "$_id",
      hourlyConsumption: {
        $map: {
          input: { $zip: { inputs: "$allMeterHourly" } },
          as: "hourGroup",
          in: { $sum: "$$hourGroup" }
        }
      }
    }
  }
])

逻辑说明

  • $group阶段将同一日期下所有电表的hourlyConsumption数组合并为二维数组allMeterHourly,示例输入下该值为[[0,0,1,...], [10,10,10,...]]
  • $zip算子会将二维数组按索引位置重新打包,得到每小时所有电表的耗量集合,示例中输出为[[0,10], [0,10], [1,10], ...]
  • $map遍历每小时的耗量集合,用$sum求和即可得到对应小时的总耗量,最终输出符合要求的合并结果

如果存在部分文档hourlyConsumption长度不足24位的场景,可以在$zip参数中添加useLongestLength: true属性,缺失位置会默认按null处理,$sum会自动忽略null值不影响求和结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:27:05