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

MongoDB中10:00-11:00时段数据聚合遗漏数据的解决方法

解决方案

要将11:00的文档归入10点时段的聚合结果,核心是调整日期分组逻辑:把整点(分钟为0)的文档归属到前一个小时,并将其分钟显示为59。以下是修改后的聚合查询:

完整聚合管道

[
  {
    "$project": {
      "energy": 1,
      "adjustedData": {
        "$let": {
          "vars": {
            "parts": { "$dateToParts": { "date": "$timestamp" } }
          },
          "in": {
            "year": "$$parts.year",
            "month": "$$parts.month",
            "day": "$$parts.day",
            "hour": {
              "$cond": {
                "if": { "$eq": [ "$$parts.minute", 0 ] },
                "then": { "$subtract": [ "$$parts.hour", 1 ] },
                "else": "$$parts.hour"
              }
            },
            "minute": {
              "$cond": {
                "if": { "$eq": [ "$$parts.minute", 0 ] },
                "then": 59,
                "else": "$$parts.minute"
              }
            }
          }
        }
      }
    }
  },
  {
    "$group": {
      "_id": {
        "year": "$adjustedData.year",
        "month": "$adjustedData.month",
        "day": "$adjustedData.day",
        "hour": "$adjustedData.hour"
      },
      "activeEnergy": {
        "$push": {
          "minute": "$adjustedData.minute",
          "energy": "$energy"
        }
      }
    }
  }
]

逻辑说明

  1. 日期调整处理:
    • 用$let将$dateToParts解析的日期部分存为变量,避免重复计算
    • 通过$cond判断:若文档分钟数为0(如11:00),则将小时减1(11→10),同时把分钟设为59;非整点文档保持原小时和分钟不变
  2. 分组聚合:
    • 基于调整后的年、月、日、小时分组,确保11:00的文档被归入10点时段
    • 将调整后的分钟和对应energy值推入activeEnergy数组

输出结果

执行查询后将得到期望结果:

{
  "_id": {
    "year": 2023,
    "month": 5,
    "day": 15,
    "hour": 10
  },
  "activeEnergy": [
    { "minute": 0, "energy": 2333 },
    { "minute": 10, "energy": 2340 },
    { "minute": 30, "energy": 2349 },
    { "minute": 40, "energy": 2355 },
    { "minute": 50, "energy": 2360 },
    { "minute": 59, "energy": 2370 }
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:07:05