【问题标题】:Mongo Aggregation Query in spring-data-mongo Java using mongoTemplate使用 mongoTemplate 在 spring-data-mongo Java 中进行 Mongo 聚合查询
【发布时间】: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)

救命!

【问题讨论】:

    标签: mongodb spring-boot mongodb-query spring-data-mongodb


    【解决方案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)),但未定义名称。

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

    【讨论】:

      猜你喜欢
      • 2017-05-02
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      相关资源
      最近更新 更多