【发布时间】:2020-02-22 06:54:41
【问题描述】:
我有以下数据(汽车):
[
{
"make" : “Ferrari”,
"model" : “F40",
"services" : [
{
"type" : "FULL",
“date_time" : ISODate("2019-10-31T09:00:00.000Z"),
},
{
"type" : "FULL",
"scheduled_date_time" : ISODate("2019-11-04T09:00:00.000Z"),
}
],
},
{
"make" : "BMW",
"model" : “M3",
"services" : [
{
"type" : "FULL",
"scheduled_date_time" : ISODate("2019-10-31T09:00:00.000Z"),
},
{
"type" : "FULL",
“scheduled_date_time" : ISODate("2019-11-04T09:00:00.000Z"),
}
],
}
]
使用 Spring 数据 MongoDb 我想要一个查询来检索 中 last 项目的 scheduled_date_time 的所有 Cars services 数组位于某个日期范围之间。
我之前在使用 services 数组中的第一项时使用的查询如下:
mongoTemplate.find(Query.query(
where("services.0.scheduled_date_time").gte(fromDate)
.andOperator(
where("services.0.scheduled_date_time").lt(toDate))),
Car.class);
注意 0 索引,因为它是第一个而不是最后一个(对于我当前的要求)。
我认为使用聚合和投影和.arrayElementAt(-1) 可以解决问题,但我还没有完全发挥作用。我目前的努力是:
Aggregation agg = newAggregation(
project().and("services").arrayElementAt(-1).as("currentService"),
match(where("currentService.scheduled_date_time").gte(fromDate)
.andOperator(where("currentService.scheduled_date_time").lt(toDate)))
);
AggregationResults<Car> results = mongoTemplate.aggregate(agg, Car.class, Car.class);
return results.getMappedResults();
任何帮助建议表示赞赏。
谢谢,
【问题讨论】:
-
上次服务的日期是否更大? Car 实体有 id 属性吗?
-
@earandap 感谢您的回复,是的,我只是为了简洁而删除了它
标签: mongodb spring-boot spring-data spring-data-mongodb