Я использую mongodb и spring-boot в проекте. Я использовал ручную ссылку, чтобы выделить коллекцию. Моя структура похожа на следующую.
Коллекция катушек
{
_id : "reel_id_1",
name: "reel 1",
category :[
{
_id : "category_id_1",
name: "category 1",
videos: ["video_id_1","video_id_2"]
}
]
}
Коллекция видео
{
_id: "video_id_1", // first document
name: "mongo"
}
{
_id: "video_id_2", // seconddocument
name: "java"
}
Java классы
@Document
@Data
public class Reel {
@Id
private ObjectId _id;
private String name;
List<Category> category;
}
@Data
public class Category {
@Id
private ObjectId _id=new ObjectId();
private String name;
Video videos;
}
@Document
@Data
public class Video {
@Id
private ObjectId _id = new ObjectId();
private String name;
}
Я пытался объединить оба документа с помощью mongoTemplate
public List<Reel> findById(ObjectId _id) {
LookupOperation lookupOperation = LookupOperation.newLookup()
.from("video")
.localField("category.videos")
.foreignField("_id")
.as("category.videos");
UnwindOperation unwindOperation = Aggregation.unwind("category");
Aggregation agg = newAggregation(unwindOperation,match(Criteria.where("_id").is(_id)),lookupOperation);
Aggregation aggregation = newAggregation(lookupOperation);
List<Reel> results = mongoTemplate.aggregate(aggregation, "reel", Reel.class).getMappedResults();
return results;
}
Но выдается ошибка.
Failed to instantiate java.util.List using constructor NO_CONSTRUCTOR with arguments
Но так как я использую «раскрутить», я создал новую сущность UnwindReel и добавил Category category
вместо List<Category> category
. И используется
List<UnwindReel> results = mongoTemplate.aggregate(aggregation, "reel", UnwindReel.class).getMappedResults();
Он объединяет только первый объект видео (video_id_1). Как я могу получить все объекты в массиве videos ? Есть ли способ получить? и может кто-нибудь, пожалуйста, дайте мне знать, что я здесь пропустил? Заранее спасибо.