MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie kann ich verschachtelte Verknüpfungen (Verknüpfung von 3 oder mehr Sammlungen) in einer MongoDB-Aggregationspipeline durchführen?

Führen Sie eine verschachtelte Suche mit durch Suche mit Pipeline ,

  • $lookup mit orders Sammlung,
    • let , definieren Sie die Variable customer_id das ist aus der Hauptsammlung, um auf diese Referenzvariable innerhalb der Pipeline mit $$ zuzugreifen wie $$customer_id ,
    • pipeline können Pipeline-Stufen hinzufügen, genauso wie wir es in der Root-Level-Pipeline tun
    • $expr Immer wenn wir interne Felder abgleichen, ist eine Ausdrucksabgleichbedingung erforderlich, also $$customer_id ist das übergeordnete Sammlungsfeld, das in let deklariert ist und $customer_id ist das Feld der untergeordneten Sammlung/aktuellen Sammlung
  • $lookup mit orderitems Sammlung
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"
    }
  }
])

Spielplatz