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

Come posso eseguire join nidificati (unire 3 o più raccolte) in una pipeline di aggregazione MongoDB?

Esegui la ricerca nidificata utilizzando ricerca con pipeline ,

  • $lookup con orders raccolta,
    • let , definisci la variabile customer_id ovvero dalla raccolta principale, per accedere a questa variabile di riferimento all'interno della pipeline utilizzando $$ come $$customer_id ,
    • pipeline possiamo aggiungere fasi della pipeline come facciamo nella pipeline a livello di root
    • $expr ogni volta che abbiniamo campi interni, è necessaria la condizione di corrispondenza dell'espressione, quindi $$customer_id è il campo di raccolta padre dichiarato in let e $customer_id è il campo della raccolta figlio/della raccolta corrente
  • $lookup con orderitems raccolta
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"
    }
  }
])

Parco giochi