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

如何在MongoRepository的@Aggregation注解中返回格式化日期

在Spring Data MongoDB的@Aggregation中返回转换后的日期
  • 你用错了操作符:$dateFromString的作用是将字符串格式的日期转换为MongoDB Date类型,而你需要的是把MongoDB原生Date字段转换成指定格式的字符串,正确的操作符是$dateToString。

  • 修改聚合管道,添加$project阶段实现日期格式转换:
    假设你的CartPurchaseMongo实体中存储日期的字段名为purchaseDate,要转换成dd/mm/yyyy HH:mm:ss格式,修改后的代码如下:

@Aggregation(pipeline = {
    "{ '$match': { 'userid' : ?0} }", 
    "{ '$sort': {_id: -1}}",
    "{ '$skip' : ?1 }", 
    "{ '$limit' : ?2 }",
    "{ '$project': { " +
        "_id: 1, " +
        "userid: 1, " +
        "// 列出你需要保留的其他业务字段,比如商品信息、订单金额等 " +
        "formattedPurchaseDate: { '$dateToString': { format: '%d/%m/%Y %H:%M:%S', date: '$purchaseDate' } } " +
    "} }"
})
List<CartPurchaseMongo> findPurchase(
    Long userId,
    int skip,
    int limit
);

关键说明:

  1. 把$purchaseDate替换成你实体中实际的日期字段名
  2. formattedPurchaseDate是转换后的字段名,需要在CartPurchaseMongo中新增对应的String类型字段来接收这个格式化后的日期值
  3. 如果想直接覆盖原有日期字段的格式,可将formattedPurchaseDate改成原有字段名,同时把实体类中该字段的类型从Date改为String

MongoDB日期格式占位符对应关系:

  • %d:两位数字的日期(01-31)
  • %m:两位数字的月份(01-12)
  • %Y:四位数字的年份
  • %H:24小时制的小时(00-23)
  • %M:两位数字的分钟(00-59)
  • %S:两位数字的秒数(00-60)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:22:16