使用mongoTemplate在spring-data-mongo Java中进行Mongo聚合查询

问题描述 投票:1回答:1

我正在尝试使用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)

帮助!

mongodb spring-boot mongodb-query spring-data-mongodb
1个回答
0
投票

尝试

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)),但未定义名称。

这个问题是六个月前问的,您可能已经解决了。

© www.soinside.com 2019 - 2024. All rights reserved.