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

Como posso realizar junções aninhadas (juntando 3 ou mais coleções) em um pipeline de agregação do MongoDB?


Faça uma pesquisa aninhada usando pesquisa com pipeline ,
  • $lookup com orders coleção,
    • let , defina a variável customer_id que é da coleção principal, para acessar essa variável de referência dentro do pipeline usando $$ como $$customer_id ,
    • pipeline pode adicionar estágios de pipeline da mesma forma que fazemos no pipeline de nível raiz
    • $expr sempre que combinamos campos internos, ele requer uma condição de correspondência de expressão, então $$customer_id é o campo de coleção pai declarado em let e $customer_id é o campo da coleção filha/atual
  • $lookup com orderitems coleção
db.customers.aggregate([
  {
    $lookup: {
      from: "orders",
      let: { customer_id: "$customer_id" },
      pipeline: [
        { $match: { $expr: { $eq: ["$$customer_id", "$customer_id"] } } },
        {
          $lookup: {
            from: "orderitems",
            localField: "order_id",
            foreignField: "order_id",
            as: "items"
          }
        }
      ],
      as: "orders"
    }
  }
])

Playground