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

MongoDB中使用moment.js格式化createdAt日期出现‘Invalid Date’问题求助

解决方案:MongoDB聚合中转换日期格式为'Mar 22 2023'

你之前的写法错误在于:在MongoDB聚合管道的$project阶段,直接调用moment('$createdAt')时,'$createdAt'是作为字符串字面量传给moment的,而不是MongoDB文档里的实际日期值,所以moment无法解析这个字符串,返回Invalid Date。

下面给两种可行方案:

方案1:用MongoDB原生$dateToString操作符(推荐)

不需要依赖moment,直接在聚合阶段完成格式转换,性能更好:

{
  $project: {
    _id: 0,
    createdAt: {
      $dateToString: {
        format: "%b %d %Y",
        date: "$createdAt"
      }
    }
  }
}

格式参数说明:

  • %b:月份缩写(如Mar、Apr)
  • %d:两位数字的日期(如22、05)
  • %Y:四位数字的年份(如2023)

方案2:聚合后用moment处理

如果一定要用moment,可以先从数据库获取原始日期,再在JavaScript层面遍历处理:

// 先执行聚合,获取原始日期数据
const rawResults = await YourCollection.aggregate([
  {
    $project: {
      _id: 0,
      createdAt: 1 // 保留原始日期字段
    }
  }
]);

// 遍历结果,用moment格式化日期
const formattedResults = rawResults.map(item => ({
  createdAt: moment(item.createdAt).format('MMM DD YYYY')
}));

内容的提问来源于stack exchange,提问作者Code The World

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:34:59