MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Otimização de junção de consulta Mongodb


Acho que você quer fazer algo assim. Eu não testei essa consulta, mas isso é o que eu tentaria no seu lugar. Isso só é possível no mongodb 3.6, porque ele suporta várias junções. A ideia é juntar as 3 coleções. A primeira junção é Pais e Pessoa por id de Pais e Pessoas "parentsId". A segunda junção é Pais e Avós. Em seguida, você filtra pelo nome do avô e obterá um documento que contém esse avô, seu filho (pai) e seu neto (pessoa). Então você apenas projeta a pessoa.
    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}}
}])

Eu acho que isso vai fazer o truque