sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan kan jeg udføre indlejrede joinforbindelser (saml 3 eller flere samlinger) i en MongoDB-aggregationspipeline?

Foretag indlejret opslag ved hjælp af opslag med pipeline ,

  • $lookup med orders samling,
    • let , definer variabel customer_id det er fra hovedsamlingen, for at få adgang til denne referencevariabel inde i pipeline ved hjælp af $$ som $$customer_id ,
    • pipeline kan tilføje pipeline-trin på samme måde, som vi gør i rodniveau-pipeline
    • $expr hver gang vi matcher interne felter kræver det udtryksmatch-betingelse, så $$customer_id er et overordnet samlingsfelt, der er erklæret i let og $customer_id er børnesamlingens/nuværende samlings felt
  • $lookup med orderitems indsamling
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"
    }
  }
])

Legeplads




  1. MongoDB replikasæt med simpel adgangskodegodkendelse

  2. $concat felt med indeks i $map mongodb?

  3. mongodb kunne ikke oprette forbindelse til serveren

  4. Rediger og gentag MongoDB oplog