sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur kan jag utföra kapslade kopplingar (sammanfoga 3 eller fler samlingar) i en MongoDB-aggregationspipeline?

Gör kapslade sökningar med slå upp med pipeline ,

  • $lookup med orders samling,
    • let , definiera variabeln customer_id det är från huvudsamlingen, för att komma åt denna referensvariabel i pipeline med $$ som $$customer_id ,
    • pipeline kan lägga till pipelinesteg på samma sätt som vi gör i pipeline på rotnivå
    • $expr när vi matchar interna fält kräver det uttrycksmatchningsvillkor, så $$customer_id är föräldrasamlingsfält som deklareras i let och $customer_id är barnsamlingens/aktuella samlingens fält
  • $lookup med orderitems samling
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"
    }
  }
])

Lekplats




  1. Sprider MongoDB över EC2-regioner

  2. Varför MongoDB – 10 skäl att lära sig MongoDB för 2022

  3. Spring Data och MongoDB repository - hur skapar man en uppdateringsfråga?

  4. Hur gör man effektivt distinkt med flera nycklar?