使用spring-data-mongodb-1.5.4
和mongodb-driver-3.4.2
我有一个Hotel
类
public class Hotel {
private String name;
private int pricePerNight;
private Address address;
private List<Review> reviews;
//getter, setter, default constructor, parameterized constructor
Review
类:public class Review {
private int rating;
private String description;
private User user;
private boolean isApproved;
//getter, setter, default constructor, parameterized constructor
当我调用
Aggregation.unwind("reviews");
时,它会抛出UnwindOperation unwindOperation = Aggregation.unwind("reviews");
Aggregation aggregation = Aggregation.newAggregation(unwindOperation);
AggregationResults<Hotel> results=mongoOperations.aggregate(aggregation,"hotel", Hotel.class);
我看到this question,但是对我没有帮助。
如何解决呢?
最佳答案
当您使用$unwind
reviews
字段时,查询的返回json结构不再与您的Hotel
类匹配。因为$unwind
操作使reviews
成为子对象而不是列表。如果您在robomongo或其他工具中尝试查询,则可以看到您的返回对象是这样的
{
"_id" : ObjectId("59b519d72f9e340bcc830cb3"),
"id" : "59b23c39c70ff63135f76b14",
"name" : "Signature",
"reviews" : {
"id" : 1,
"userName" : "Salman",
"rating" : 8,
"approved" : true
}
}
因此,您应该使用其他类而不是
Hotel
之类的UnwindedHotel
public class UnwindedHotel {
private String name;
private int pricePerNight;
private Address address;
private Review reviews;
}
UnwindOperation unwindOperation = Aggregation.unwind("reviews");
Aggregation aggregation = Aggregation.newAggregation(unwindOperation);
AggregationResults<UnwindedHotel> results=mongoOperations.aggregate(aggregation,"hotel", UnwindedHotel.class);