如何将 $dateToString 操作的 MongoDB 结果转换为 Java 对象

How to convert MongoDB results from $dateToString operation to Java object

我使用以下查询从我的 mongo 文档中的 ISODate 数据类型获得了 "date only" 结果:

db.getCollection('tournamentactivity').aggregate( [ 
{
    $project:{
            "yearMonthDay": 
                { 
                    "$dateToString" : 
                    { 
                        "format" : "%Y-%m-%d", 
                        "date" : "$activityDate" 
                    } 
                },                   
                "tid" : 1,
                "dayActivity.type" : 1    
           }
 },
 {
     $match:{
          $and : [
            { "tid" : "12345678" },
            { "yearMonthDay" : "2017-11-05" }             
         ]


      }      
}] )

到这里为止一切都很好。但是我试图在 Java 对象中转换相同的内容,因为我必须在我的响应类型中发送相同的内容。

我已遵循本教程:Projections 并尝试在我的 Java 代码中执行相同的操作,如下所示:

ProjectionOperation projectToMatchModel = project().
            andExpression("format").as("%Y-%m-%d").
            andExpression("date").as("$activityDate");

我之前写过聚合操作,但我不知道如何在 Java 代码中转换这个 result/query。

任何人都可以指导我我哪里出错了以及如何在 聚合聚合=newAggregation( ); 方法 ?

谢谢。

仅供参考:我不知道在我的聚合对象中转换这个查询,我可能在选择投影操作时是错误的。如果我错了,请宽容我!

您可以尝试以下聚合。

添加以下导入

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*;
import static org.springframework.data.mongodb.core.aggregation.Fields.field;
import static org.springframework.data.mongodb.core.aggregation.Fields.from;
import static org.springframework.data.mongodb.core.query.Criteria.where;

import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.DateOperators;

选项 1(使用扩展方法)

Aggregation aggregation = newAggregation(
       project(from(field("dayActivity.type", "dayActivity.type"), 
                    field("tid"))).
               and("activityDate").dateAsFormattedString("%Y-%m-%d").as("yearMonthDay"),
       match(where("yearMonthDay").is("2017-11-05").and("tid").is("12345678"))
);

选项 2(使用聚合表达式)

Aggregation aggregation = newAggregation(
       project(from(field("dayActivity.type", "dayActivity.type"), 
                    field("tid"))).
               and(DateOperators.dateOf("activityDate").toString("%Y-%m-%d")).as("yearMonthDay"),
       match(where("yearMonthDay").is("2017-11-05").and("tid").is("12345678"))
);