MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Optimisation de la jointure de requête Mongodb

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