Tôi nghĩ bạn muốn làm một cái gì đó như thế này. Tôi đã không kiểm tra truy vấn này, nhưng đây là những gì tôi sẽ thử ở vị trí của bạn. Điều này chỉ có thể thực hiện được trên 3.6 mongodb, vì nó hỗ trợ nhiều phép nối. Ý tưởng là tham gia cả 3 bộ sưu tập. Tham gia đầu tiên là Cha mẹ và Người theo id Cha mẹ và Người "cha mẹId". Tham gia thứ hai là Cha mẹ và Ông bà. Sau đó, bạn lọc ra theo tên ông bà và bạn sẽ nhận được một tài liệu có chứa ông bà đó, con trai của ông ấy (cha mẹ) và cháu trai của ông ấy (người). Sau đó, bạn chỉ cần chiếu người đó.
db.Parents.aggregate([
{
$lookup:{
from:"Person",
localField:"_id",
foreignField:"parentId",
as:"Person"
}
},
{
$unwind:"$Person"
},
{
$lookup:{
from:"Grandparents",
localField:"grandparentId",
foreignField:"_id",
as:"Grandparents"
}
},
{
$unwind:"$Grandparents"
},
{$match:{Grandparents.name:"x"}},
{$project:{Person.name:1,Person._id:1}}
}])
Tôi nghĩ điều này sẽ thành công