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

如何对MongoDB聚合结果的对象数组按日期求和生成图表所需数据

解决方案

方法1:在MongoDB聚合管道中直接处理

你可以在原有聚合逻辑后追加3个阶段实现需求,步骤如下:

  • 用$unwind操作符展开charts数组,将每个数组成员拆分为独立文档
  • 同时按文档主键_id和子文档的date字段分组,累加相同日期的consumption值,同时保留外层的总consumption字段
  • 再次按文档主键_id分组,将处理后的子文档重新组装为charts数组,同时保留外层总consumption字段

对应聚合代码:

db.collection.aggregate([
  // 此处保留你之前的聚合查询逻辑,追加以下3个阶段即可
  { $unwind: "$charts" },
  {
    $group: {
      _id: {
        rootId: "$_id",
        date: "$charts.date"
      },
      rootConsumption: { $first: "$consumption" },
      monthConsumption: { $sum: "$charts.consumption" }
    }
  },
  {
    $group: {
      _id: "$_id.rootId",
      consumption: { $first: "$rootConsumption" },
      charts: {
        $push: {
          date: "$_id.date",
          consumption: "$monthConsumption"
        }
      }
    }
  }
])

方法2:在服务端/前端用JavaScript处理已查询到的结果

如果你不想修改现有聚合逻辑,拿到结果后直接遍历处理即可,代码如下:

// rawResult为你当前查询得到的原始结果数组
const processedResult = rawResult.map(item => {
  // 统计每个日期的总消费
  const dateCount = item.charts.reduce((acc, curr) => {
    acc[curr.date] = (acc[curr.date] || 0) + curr.consumption
    return acc
  }, {})
  // 组装为预期结构
  return {
    ...item,
    charts: Object.entries(dateCount).map(([date, consumption]) => ({ date, consumption }))
  }
})

内容的提问来源于stack exchange,提问作者Mohamed Adel Lotfy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:00:02