sql >> Database >  >> NoSQL >> MongoDB

Mongodb-query join-optimalisatie

Ik denk dat je zoiets wilt doen. Ik heb deze query niet getest, maar dit is wat ik in jouw plaats zou proberen. Dit is alleen mogelijk op 3.6 mongodb, omdat het meerdere joins ondersteunt. Het idee is om je bij alle 3 de collecties aan te sluiten. Eerste deelname is Ouders en Persoon door Ouder-ID en Personen "ouders-ID". Tweede join is ouders en grootouders. Vervolgens filter je uit op grootoudernaam en krijg je een document waarin die grootouder, zijn zoon (ouder) en zijn kleinzoon (persoon) staan. Dan projecteer je gewoon de persoon.

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

Ik denk dat dit zal lukken




  1. Hoeveel collecties zijn mogelijk in een MongoDB zonder prestatieverlies?

  2. Hoe evalueert MongoDB meerdere $or-statements?

  3. Index in MongoDB

  4. Hoe MongoDB-query optimaliseren met zowel $gt als $lte?