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

如何将Mongo聚合输出的嵌套对象数组转为堆叠柱状图所需格式

解决Mongo聚合结果转堆叠柱状图数据格式的方案

需求说明

给定Mongo聚合输出的文档状态追踪数组,需将其转换为堆叠柱状图所需格式,要求data数组严格遵循["legal", "operations", "accounting"]的部门顺序,同时将无k字段的条目合并到空状态""中。

输入数据

const input = [
    {
        "legal": [
            { "k": "", "v": 6 },
            { "v": 3},
            { "k": "To be uploaded", "v": 5 },
            { "k": "To be reviewed", "v": 96 }
        ],
        "operations": [
            { "v": 1 },
            { "k": "To be uploaded", "v": 3 },
            { "k": "To be reviewed", "v": 24 }
        ],
        "accounting": [
            { "k": "To be reviewed", "v": 137 },
            { "k": "", "v": 3 },
            { "v": 2 },
            { "k": "To be uploaded", "v": 24 },
            { "k": "Not Required", "v": 1 }
        ]
    }
];

转换代码(JavaScript)

// 指定固定部门顺序
const deptOrder = ["legal", "operations", "accounting"];
const statusMap = {};

// 遍历每个部门的状态数据
deptOrder.forEach(dept => {
    input[0][dept].forEach(item => {
        // 无k字段的条目归为空状态
        const status = item.k ?? "";
        const value = item.v;

        // 初始化状态对应的data数组,默认填充0
        if (!statusMap[status]) {
            statusMap[status] = {
                name: status,
                data: new Array(deptOrder.length).fill(0)
            };
        }

        // 累加对应部门的数值
        const deptIndex = deptOrder.indexOf(dept);
        statusMap[status].data[deptIndex] += value;
    });
});

// 按需求的状态顺序整理结果
const result = [
    statusMap[""],
    statusMap["To be uploaded"],
    statusMap["To be reviewed"],
    statusMap["Not Required"]
];

console.log(JSON.stringify(result, null, 2));

输出结果

[
  {
    "name": "",
    "data": [9, 1, 5]
  },
  {
    "name": "To be uploaded",
    "data": [5, 3, 24]
  },
  {
    "name": "To be reviewed",
    "data": [96, 24, 137]
  },
  {
    "name": "Not Required",
    "data": [0, 0, 1]
  }
]

代码关键点

  • 使用item.k ?? ""统一处理无k字段的条目,归为空状态
  • 初始化每个状态的data数组时填充0,确保缺失部门的数值为0
  • 严格按照指定部门顺序累加数值,保证data数组顺序符合要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:45:34