sql >> Databáze >  >> NoSQL >> MongoDB

Jak mohu provést vnořená spojení (spojení 3 nebo více kolekcí) v agregačním kanálu MongoDB?

Proveďte vnořené vyhledávání pomocí vyhledávání pomocí potrubí ,

  • $lookup s orders kolekce,
    • let , definujte proměnnou customer_id to je z hlavní kolekce, pro přístup k této referenční proměnné uvnitř potrubí pomocí $$ jako $$customer_id ,
    • pipeline můžete přidat fáze potrubí stejně jako my v kořenovém potrubí
    • $expr kdykoli porovnáváme interní pole, vyžaduje podmínku shody výrazu, takže $$customer_id je nadřazené pole kolekce, které je deklarováno v let a $customer_id je pole podřízené kolekce/aktuální kolekce
  • $lookup s orderitems kolekce
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"
    }
  }
])

Hřiště




  1. Má Meteor odlišný dotaz na sbírky?

  2. Jak získat vysvětlení pro počet MongoDB?

  3. Mapa Omezte druh dotazu s potřebou korelovat s předchozím řádkem

  4. Mapreduce v nativním ovladači mongodb ruby