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

JavaScript处理MongoDB聚合分页数据:日期值对比及描述字段生成

需求:为MongoDB聚合结果添加日期对比描述字段

原始聚合返回数据

const data = {
  docs: [
    {
      Material_Description: 'NABATI VITAKRIM RSY 122g MT (24 pcs)',
      Plant: 'K105',
      Channel: 'MT',
      Material: '300973',
      expiredDate: 'January-2024',
      '2023-04-12': 124
    },
    {
      Material_Description: 'NEXTAR GANDUMKU RCO 22g GT(10pc x 12bal)',
      Plant: 'K105',
      Channel: 'GT',
      Material: '303923',
      expiredDate: 'October-2023',
      '2023-04-12': 1
    }
  ],
  totalDocs: 2,
  limit: 1000,
  page: 1,
  totalPages: 1,
  pagingCounter: 1,
  hasPrevPage: false,
  hasNextPage: false,
  prevPage: null,
  nextPage: null
}

近7天日期列表生成代码

const dateLists = Array.from({ length: 7 }, (_, index) => {
  const local = new Date();
  local.setDate(local.getDate() - index);
  return local.toLocaleDateString("en-SE", {
    timeZone: "Asia/Jakarta",
  });
});

当前处理结果

已成功为每条数据补充近7天的日期字段(默认值为0),但未实现相邻日期值对比生成描述字段,当前结果如下:

{
  "docs": [
      {
          "Material": "300973",
          "Material_Description": "NABATI VITAKRIM RSY 122g MT (24 pcs)",
          "Plant": "K105",
          "Channel": "MT",
          "expiredDate": "January-2024",
          "2023-04-12": 124,
          "2023-04-13": 0,
          "2023-04-14": 0,
          "2023-04-15": 0,
          "2023-04-16": 1,
          "2023-04-17": 0,
          "2023-04-18": 0
      },
      {
          "Material": "303923",
          "Material_Description": "NEXTAR GANDUMKU RCO 22g GT(10pc x 12bal)",
          "Plant": "K105",
          "Channel": "GT",
          "expiredDate": "October-2023",
          "2023-04-12": 1,
          "2023-04-13": 0,
          "2023-04-14": 0,
          "2023-04-15": 0,
          "2023-04-16": 0,
          "2023-04-17": 0,
          "2023-04-18": 0
      }
  ],
  "totalDocs": 2,
  "limit": 1000,
  "page": 1,
  "totalPages": 1,
  "pagingCounter": 1,
  "hasPrevPage": false,
  "hasNextPage": false,
  "prevPage": null,
  "nextPage": null
}

期望结果

需为每个日期字段添加对应的Keterangan_N描述字段,规则:

  • 第一个日期的描述固定为No Data
  • 后续日期与前一个日期对比:
    • 当前值 < 前值:Berkurang
    • 当前值 = 前值:Sama
    • 当前值 > 前值:Bertambah

示例格式:

"docs": [
    {
        "Material": "300973",
        "Material_Description": "NABATI VITAKRIM RSY 122g MT (24 pcs)",
        "Plant": "K105",
        "Channel": "MT",
        "expiredDate": "January-2024",
        "2023-04-12": 124,
        "Keterangan_1":"No Data",
        "2023-04-13": 0,
        "Keterangan_2":"Berkurang",
        "2023-04-14": 0,
        "Keterangan_3":"Sama",
        "2023-04-15": 0,
        "Keterangan_4":"Sama",
        "2023-04-16": 1,
        "Keterangan_5":"Bertambah",
        "2023-04-17": 0,
        "Keterangan_6":"Berkurang",
        "2023-04-18": 0,
        "Keterangan_7":"Sama",
    }
]

解决方案

通过遍历日期列表和文档数据,先补充缺失日期字段,再对比相邻日期值生成描述字段,代码如下:

// 生成近7天日期列表
const dateLists = Array.from({ length: 7 }, (_, index) => {
  const local = new Date();
  local.setDate(local.getDate() - index);
  return local.toLocaleDateString("en-SE", {
    timeZone: "Asia/Jakarta",
  });
});

// 处理每个文档
data.docs = data.docs.map(doc => {
  // 补充所有缺失的日期字段,默认值为0
  dateLists.forEach(date => {
    if (!doc.hasOwnProperty(date)) {
      doc[date] = 0;
    }
  });

  // 生成对应的Keterangan字段
  dateLists.forEach((date, index) => {
    const keteranganKey = `Keterangan_${index + 1}`;
    if (index === 0) {
      doc[keteranganKey] = "No Data";
    } else {
      const prevDate = dateLists[index - 1];
      const currentValue = doc[date];
      const prevValue = doc[prevDate];

      if (currentValue < prevValue) {
        doc[keteranganKey] = "Berkurang";
      } else if (currentValue > prevValue) {
        doc[keteranganKey] = "Bertambah";
      } else {
        doc[keteranganKey] = "Sama";
      }
    }
  });

  return doc;
});

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

代码说明

  1. 补充日期字段:遍历日期列表,为每个文档添加缺失的日期键,默认值设为0。
  2. 生成描述字段:
    • 第一个日期对应的描述固定为No Data
    • 从第二个日期开始,获取前一个日期的值进行对比,根据差值设置对应的描述文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:17:08