MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Optimierung der Mongodb-Abfrageverknüpfung

Ich denke, Sie wollen so etwas tun. Ich habe diese Abfrage nicht getestet, aber das würde ich an Ihrer Stelle versuchen. Dies ist nur unter 3.6 Mongodb möglich, da es mehrere Joins unterstützt. Die Idee ist, alle 3 Sammlungen zu verbinden. Der erste Join ist Parents and Person by Parents ID und Persons "parentsId". Die zweite Verknüpfung ist Eltern und Großeltern. Dann filtern Sie nach dem Namen des Großelternteils und Sie erhalten ein Dokument, das diesen Großelternteil, seinen Sohn (Elternteil) und seinen Enkel (Person) enthält. Dann projizierst du die Person einfach.

    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}}
}])

Ich denke, das wird den Zweck erfüllen