使用 mongoTemplate 在 spring-data-mongo Java 中进行 Mongo 聚合查询
Posted
技术标签:
【中文标题】使用 mongoTemplate 在 spring-data-mongo Java 中进行 Mongo 聚合查询【英文标题】:Mongo Aggregation Query in spring-data-mongo Java using mongoTemplate 【发布时间】:2019-10-14 01:58:18 【问题描述】:我正在尝试使用 spring-data-mongo API 将毫秒转换为 dd-mm-yyyy 格式。下面是所需的 Mongo 工作查询和对应的 Java spring 代码。
"$project" :
"serverTimestamp": 1,
"formattedServerDate":
"$dateToString":
"format": "%d-%m-%Y",
"date":
"$toDate" : "$serverTimestamp"
ProjectionOperation dateProject = Aggregation.project("serverTimestamp")
.and(ConvertOperators.ToDate.toDate("$serverTimestamp"))
.dateAsFormattedString("%d-%m-%Y").as("formattedServerDate");
但我遇到了错误
Caused by: java.lang.IllegalStateException: Projection field name must not be null!
at org.springframework.util.Assert.state(Assert.java:73)
at org.springframework.data.mongodb.core.aggregation.ProjectionOperation$ProjectionOperationBuilder.getRequiredName(ProjectionOperation.java:1250)
at org.springframework.data.mongodb.core.aggregation.ProjectionOperation$ProjectionOperationBuilder.dateAsFormattedString(ProjectionOperation.java:1204)
at com.abcd.deda.service.EventServiceImpl.getSessionStats(EventServiceImpl.java:423)
救命!
【问题讨论】:
【参考方案1】:试试
ProjectionOperation toDateProjectOperation = Aggregation.project("serverTimestamp")
.andExpression("toDate(toLong(serverTimestamp))")
.as("formattedServerDate");
ProjectionOperation dateToStringProjectOperation = Aggregation.project("serverTimestamp")
.and("formattedServerDate")
.dateAsFormattedString("%d-%m-%Y")
.as("formattedServerDate");
newAggregation(
...
toDateProjectOperation,
dateToStringProjectOperation
...
)
在 ProjectOperation 类中,dateAsFormattedString(String)
调用 this.operation.and(DateOperators.DateToString.dateOf(getRequiredName()).toString(format))
,但未定义名称。
这个问题是六个月前提出的,你可能已经解决了。
【讨论】:
以上是关于使用 mongoTemplate 在 spring-data-mongo Java 中进行 Mongo 聚合查询的主要内容,如果未能解决你的问题,请参考以下文章
如何在spring boot的多个类中使用@Autowired MongoTemplate
使用 mongoTemplate 在 spring-data-mongo Java 中进行 Mongo 聚合查询
在 Spring Boot 应用程序中使用嵌入式 MongoDb 以及 MongoTemplate 失败