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

Mongodb комбинира обобщени заявки

Можете да използвате некорелирани подзаявки, налични от MongoDB v3.6

db.Profile.aggregate([
  {
    $match: { is_del: false }
  },
  {
    $lookup: {
      from: "Store",
      as: "stores",
      let: {
        pid: { $toString: "$_id" }
      },
      pipeline: [
        {
          $match: {
            is_del: false,
            $expr: { $eq: ["$$pid", "$id"] }
          }
        },
        {
          $lookup: {
            from: "Item",
            as: "items",
            let: {
              sid: { $toString: "$_id" }
            },
            pipeline: [
              {
                $match: {
                  is_del: false,
                  $expr: { $eq: ["$$sid", "$sid"] }
                }
              },
              {
                $count: "count"
              }
            ]
          }
        },
        {
          $unwind: "$items"
        }
      ]
    }
  }
])

Mongo Playground

За да подобрите производителността, предлагам да съхранявате референтните идентификатори като ObjectId така че не е необходимо да ги конвертирате във всяка стъпка.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. изпълните само една от многото дублирани задачи със sidekiq?

  2. Преобразувайте String в дата или ISODate с помощта на Mongo Shell в MongoDB

  3. Премахване на елементи от масив от документи в Spring+Mongo

  4. MongoDB $concat

  5. Опитайте се да инсталирате mongodb с dijango?