Jag tror att du vill göra något sånt här. Jag testade inte den här frågan, men det här är vad jag skulle försöka i ditt ställe. Detta är bara möjligt på 3.6 mongodb, eftersom det stöder flera anslutningar. Tanken är att gå med i alla 3 samlingarna. Första medlemmen är Föräldrar och Person efter Förälder-ID och Personer "parentsId". Andra anslutningen är föräldrar och morföräldrar. Sedan filtrerar du bort efter farföräldrars namn och du får ett dokument som innehåller den farföräldern, hans son (förälder) och hans barnbarn(person). Sedan projicerar du bara personen.
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}}
}])
Jag tror att det här kommer att göra susen