Je pense que tu veux faire quelque chose comme ça. Je n'ai pas testé cette requête, mais c'est ce que j'essaierais à votre place. Ceci n'est possible que sur 3.6 mongodb, car il prend en charge plusieurs jointures. L'idée est de joindre les 3 collections. La première jointure est Parents et Person by Parents id, et Persons "parentsId". La deuxième jointure est Parents et Grands-parents. Ensuite, vous filtrez par nom de grand-parent et vous obtiendrez un document contenant ce grand-parent, son fils (parent) et son petit-fils (personne). Ensuite, vous projetez simplement la personne.
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}}
}])
Je pense que cela fera l'affaire