MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment puis-je effectuer des jointures imbriquées (joindre 3 collections ou plus) dans un pipeline d'agrégation MongoDB ?

Effectuez une recherche imbriquée à l'aide de recherche avec pipeline ,

  • $lookup avec orders collecte,
    • let , définissez la variable customer_id c'est-à-dire de la collection principale, pour accéder à cette variable de référence à l'intérieur du pipeline en utilisant $$ comme $$customer_id ,
    • pipeline peut ajouter des étapes de pipeline comme nous le faisons dans le pipeline au niveau racine
    • $expr chaque fois que nous faisons correspondre des champs internes, cela nécessite une condition de correspondance d'expression, donc $$customer_id est le champ de collection parent déclaré dans let et $customer_id est le champ de la collection enfant/de la collection actuelle
  • $lookup avec orderitems collecte
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"
    }
  }
])

Aire de jeux