如何在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 );
关键说明:
- 把
$purchaseDate替换成你实体中实际的日期字段名 formattedPurchaseDate是转换后的字段名,需要在CartPurchaseMongo中新增对应的String类型字段来接收这个格式化后的日期值- 如果想直接覆盖原有日期字段的格式,可将
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
相关产品推荐
相关产品推荐

