You need to enable JavaScript to run this app. MongoDB聚合中如何将ticks格式时间转换为Date对象
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB聚合中如何将ticks格式时间转换为Date对象

MongoDB Ticks格式日期转Date对象解决方案

报错原因

你存储的ticks格式是以0001-01-01 00:00:00 UTC为起点、每单位为100纳秒的时间计数,而MongoDB的$toDate仅支持接收「Unix纪元(1970-01-01 00:00:00 UTC)为起点的毫秒/秒时间戳」。同时你使用的ticks数值超出了普通数值的安全解析范围,MongoDB会将其识别为字符串尝试解析,最终触发格式错误。

正确转换方案

转换逻辑固定为三步:

  • 减去两个纪元的固定差值ticks:0001-01-01到1970-01-01的总ticks为固定值621355968000000000
  • 将差值除以10000:把100纳秒单位转换为毫秒单位
  • 用$toDate转换最终得到的毫秒时间戳

如果你的MyDateInTicks字段存储为数值/Long类型,直接使用以下$project语句即可:

$project: {
  ConvertedDate: {
    $toDate: {
      $divide: [
        { $subtract: ["$MyDateInTicks", 621355968000000000] },
        10000
      ]
    }
  }
}

如果字段存储为字符串类型,需要额外增加一步类型转换:

$project: {
  ConvertedDate: {
    $toDate: {
      $divide: [
        { $subtract: [ { $toLong: "$MyDateInTicks" }, 621355968000000000 ] },
        10000
      ]
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 15:24:03