如何将 $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"))
);
我使用以下查询从我的 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"))
);