sql >> Database >  >> NoSQL >> MongoDB

Hoe kan ik geneste joins uitvoeren (die zich bij 3 of meer collecties voegen) in een MongoDB-aggregatiepijplijn?

Voer geneste zoekopdrachten uit met opzoeken met pijplijn ,

  • $lookup met orders collectie,
    • let , definieer variabele customer_id dat is uit de hoofdverzameling, om toegang te krijgen tot deze referentievariabele in de pijplijn met behulp van $$ zoals $$customer_id ,
    • pipeline kan pijplijnfasen toevoegen op dezelfde manier als we doen in pijplijn op rootniveau
    • $expr telkens wanneer we interne velden matchen, is de voorwaarde voor het overeenkomen van expressies vereist, dus $$customer_id is het bovenliggende verzamelveld dat is gedeclareerd in let en $customer_id is het veld van de onderliggende collectie/huidige collectie
  • $lookup met orderitems collectie
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"
    }
  }
])

Speeltuin




  1. Moet het datetime-verschil berekenen voor het datetime-veld dat is opgeslagen in tekenreeksindeling in MongoDB

  2. Verwijder het array-element uit ALLE documenten met behulp van het MongoDB C#-stuurprogramma

  3. Mongoose-query retourneert null

  4. Hoe TypeError op te lossen:unhashable type 'lijst'