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

MongoDB月度交易值聚合查询:生成绘图所需分组统计数据

如何从原始交易明细生成图表所需的聚合数据格式?

嘿,这事儿好办!既然没法从数据库那边拿到聚合好的数据,咱们直接在客户端用代码来处理这些原始交易记录就行。我给你写个JavaScript的实现,逻辑简单易懂,完全能得到你想要的格式:

实现思路

  • 先初始化一个符合目标格式的空结构,分别给credit和debit准备好month数组和data数组
  • 遍历所有交易明细,按月份和**交易类型(credit/debit)**来累加对应数值
  • 最后整理月份的顺序,确保结果里的月份是按升序排列的

代码实现

// 原始交易数据
const items = [
  { month:4, action:'credit', value:1000 },
  { month:4, action:'credit', value:1000 },
  { month:5, action:'debit', value:2000 },
  { month:4, action:'debit', value:2000 },
  { month:4, action:'debit', value:500 },
  { month:5, action:'credit', value:2000 }
];

// 初始化结果结构
const result = {
  credit: { month: [], data: [] },
  debit: { month: [], data: [] }
};

// 先统计每个月份每种交易类型的总金额
const temp = {};
items.forEach(item => {
  const { month, action, value } = item;
  if (!temp[month]) {
    temp[month] = { credit: 0, debit: 0 };
  }
  temp[month][action] += value;
});

// 把统计好的数据整理成目标格式
const sortedMonths = Object.keys(temp).map(Number).sort((a, b) => a - b);
sortedMonths.forEach(month => {
  result.credit.month.push(month);
  result.credit.data.push(temp[month].credit);
  result.debit.month.push(month);
  result.debit.data.push(temp[month].debit);
});

// 最终结果
console.log([result]);

运行结果

执行上面的代码后,输出的结果就是你想要的:

[
  {
    credit: { month: [4, 5], data: [2000, 2000] },
    debit: { month: [4, 5], data: [2500, 2000] }
  }
]

如果你的技术栈不是JavaScript,也可以用类似的逻辑来实现——核心就是先按月份和交易类型做分组累加,再整理成图表需要的结构就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:59:51