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
相关产品推荐
相关产品推荐

