MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Ottimizzazione dell'unione di query Mongodb

Penso che tu voglia fare qualcosa del genere. Non ho testato questa query, ma questo è quello che proverei al posto tuo. Questo è possibile solo su 3.6 mongodb, perché supporta più join. L'idea è di unire tutte e 3 le collezioni. Il primo join è Parents and Person by Parents id e Persons "parentsId". La seconda unione è Genitori e Nonni. Quindi filtri per nome del nonno e otterrai un documento che contiene quel nonno, suo figlio (genitore) e suo nipote (persona). Quindi proietti semplicemente la persona.

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

Penso che questo farà il trucco