Мисля, че искаш да направиш нещо подобно. Не съм тествал това запитване, но това бих опитал на твое място. Това е възможно само на 3.6 mongodb, защото поддържа множество присъединявания. Идеята е да се обединят и 3-те колекции. Първото присъединяване е родители и лице по идентификатор на родители и лица "parentsId". Второто присъединяване е Родители и баби и дядовци. След това филтрирате по име на баба и дядо и ще получите документ, който съдържа този баба и дядо, неговия син (родител) и неговия внук (лице). След това просто проектирате човека.
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}}
}])
Мисля, че това ще свърши работа