gpt4 book ai didi

java - 在 Spring Data Mongodb 中使用 $$ROOT 来检索整个文档

转载 作者:行者123 更新时间:2023-12-01 06:43:49 25 4
gpt4 key购买 nike

使用 mongodb shell,我能够执行检索整个文档的聚合查询。为此,我使用 $$ROOT 变量。

db.reservations.aggregate([
{ $match : { hotelCode : "0360" } },
{ $sort : { confirmationNumber : -1 , timestamp: -1 } },
{ $group : {
_id : "$confirmationNumber",
timestamp :{$first : "$timestamp"},
fullDocument :{$first : "$$ROOT"}
}}
])

它检索内容为confirmationNumber、timestamp、fullDocument的对象。fullDocument 是整个文档。

我想知道是否可以使用 Spring-Data 和聚合框架做同样的事情。

我的java代码是:

TypedAggregation<ReservationImage> aggregation = newAggregation(
ReservationImage.class,
match(where("hotelCode").is(hotelCode)),
sort(Direction.DESC,"confirmationNumber","timestamp"),
group("confirmationNumber").
first("timestamp").as("timestamp").
first("$$ROOT").as("reservationImage"));
List<myClass> items = mongoTemplate.aggregate(
aggregation,
myClass.class).getMappedResults();

错误是:org.springframework.data.mapping.PropertyReferenceException:找不到 myClass 类型的属性 $$

你有什么想法吗?

谢谢。

最佳答案

我们创建了https://jira.spring.io/browse/DATAMONGO-954跟踪对从 MongoDB Pipeline 表达式访问系统变量的支持。

一旦到位,您应该能够编写:

Aggregation agg = newAggregation( //
match(where("hotelCode").is("0360")), //
sort(Direction.DESC, "confirmationNumber", "timestamp"), //
group("confirmationNumber") //
.first("timestamp").as("timestamp") //
.first(Aggregation.ROOT).as("reservationImage") //
);

关于java - 在 Spring Data Mongodb 中使用 $$ROOT 来检索整个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24185987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com