MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как мога да извърша вложени съединения (свързване на 3 или повече колекции) в тръбопровод за агрегиране на MongoDB?

Извършете вложено търсене с помощта на търсене с конвейер ,

  • $lookup с orders колекция,
    • let , дефинирайте променлива customer_id който е от главната колекция, за достъп до тази референтна променлива вътре в конвейера с помощта на $$ като $$customer_id ,
    • pipeline може да добавя етапи на тръбопровода, както правим в тръбопровода на основно ниво
    • $expr всеки път, когато съпоставяме вътрешни полета, това изисква условие за съвпадение на израз, така че $$customer_id е родителско поле за колекция, декларирано в let и $customer_id е полето на дъщерната/текущата колекция
  • $lookup с orderitems колекция
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"
    }
  }
])

Playground




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Поддържайте името на свойството на Id във вграден документ с mongo C# драйвер

  2. Използване на QueryBuilder и BasicDBObjectBuilder в MongoDB 3.3.0 по-горе

  3. Mongoose с ReplicaSet на Atlas

  4. Mongoose обединява две колекции и получава само определени полета от обединената колекция

  5. Може ли Meteor правилно да обработва данни, актуализирани външно директно към базата данни MongoDB?