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

如何将MongoDB $dayOfYear聚合应用于时间戳并统计日数据指标?

解决MongoDB数字时间戳的日期聚合问题

这个问题我之前也碰到过!核心问题是你的timestamp是数字类型(double),但MongoDB的日期聚合操作符(比如$year、$dayOfYear)只认Date类型,所以直接调用会抛出"can't convert from BSON type double to Date"的错误。下面给你完整的解决方案:

核心思路

先把数字格式的毫秒级时间戳转换为MongoDB原生的Date类型,再基于Date进行日期分组和聚合计算。同时我们要过滤出近30天的数据,最后按日期统计current的平均值、最小值和最大值。

完整聚合代码

db.cable23.aggregate([
  // 第一步:过滤近30天且direction=0的数据
  {
    $match: {
      direction: 0,
      $expr: {
        $gte: [
          {$toDate: "$timestamp"}, // 把数字时间戳转成Date类型
          {$subtract: ["$$NOW", 30 * 24 * 60 * 60 * 1000]} // 当前时间减去30天的毫秒数
        ]
      }
    }
  },
  // 第二步:按日期分组,计算聚合值
  {
    $group: {
      _id: {
        // 把转后的Date格式化为"YYYY-MM-DD"字符串,避免跨年的dayOfYear冲突
        $dateToString: {format: "%Y-%m-%d", date: {$toDate: "$timestamp"}}
      },
      avgCurrent: {$avg: "$current"},
      minCurrent: {$min: "$current"},
      maxCurrent: {$max: "$current"}
    }
  },
  // 第三步:按日期升序排序,结果更直观
  {
    $sort: {_id: 1}
  }
])

关键细节说明

  1. 时间戳转Date:用$toDate操作符直接把毫秒级数字时间戳转为Date类型(要求MongoDB 3.6+版本)。如果你的MongoDB版本低于3.6,可以用{$add: [new Date(0), "$timestamp"]}替代,原理是从1970-01-01开始累加毫秒数得到对应日期。
  2. 近30天过滤:用$$NOW获取当前数据库服务器时间,减去30天的毫秒数(302460601000),再和转换后的Date比较,确保只统计最近30天的数据。
  3. 分组依据:用$dateToString格式化为YYYY-MM-DD字符串,比单纯用$dayOfYear更稳妥——因为$dayOfYear在跨年时会重复(比如2023年12月31日是第365天,2024年1月1日是第1天),而格式化后的日期字符串不会有这个问题。

如果你坚持用$dayOfYear分组

如果一定要用$dayOfYear,可以结合$year一起作为分组ID,避免跨年冲突,代码如下:

db.cable23.aggregate([
  {
    $match: {
      direction: 0,
      $expr: {
        $gte: [{$toDate: "$timestamp"}, {$subtract: ["$$NOW", 30 * 24 * 60 * 60 * 1000]}]
      }
    }
  },
  {
    $group: {
      _id: {
        year: {$year: {$toDate: "$timestamp"}},
        dayOfYear: {$dayOfYear: {$toDate: "$timestamp"}}
      },
      avgCurrent: {$avg: "$current"},
      minCurrent: {$min: "$current"},
      maxCurrent: {$max: "$current"}
    }
  },
  {$sort: {"_id.year": 1, "_id.dayOfYear": 1}}
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:53:20