sql >> Base de Datos >  >> NoSQL >> MongoDB

Optimización de combinación de consultas de Mongodb

Creo que quieres hacer algo como esto. No probé esta consulta, pero esto es lo que intentaría en su lugar. Esto solo es posible en 3.6 mongodb, porque admite múltiples uniones. La idea es unir las 3 colecciones. La primera unión es Parents y Person by Parents id, y Persons "parentsId". La segunda unión es Padres y Abuelos. Luego filtra por nombre de abuelo y obtendrá un documento que contiene ese abuelo, su hijo (padre) y su nieto (persona). Entonces solo proyectas a 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}}
}])

Creo que esto hará el truco