Ik denk dat je zoiets wilt doen. Ik heb deze query niet getest, maar dit is wat ik in jouw plaats zou proberen. Dit is alleen mogelijk op 3.6 mongodb, omdat het meerdere joins ondersteunt. Het idee is om je bij alle 3 de collecties aan te sluiten. Eerste deelname is Ouders en Persoon door Ouder-ID en Personen "ouders-ID". Tweede join is ouders en grootouders. Vervolgens filter je uit op grootoudernaam en krijg je een document waarin die grootouder, zijn zoon (ouder) en zijn kleinzoon (persoon) staan. Dan projecteer je gewoon de persoon.
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}}
}])
Ik denk dat dit zal lukken