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

Агрегиране с множество критерии и съвпадение на суми въз основа на ключа за преброяване

Тъй като има две колекции, трябва да използваме

  • $lookup да се присъедините към колекциите. Тук използвах несвързан подзаявки
  • Агрегирането се извършва в colA колекции, но вътре в lookup pipeline на извършваме агрегиране на colB . $unwind помага за деструктуриране на items . $match помага за елиминиране на нежелани данни (етапът на съвпадение изисква $expr ).
  • След като нашето присъединяване е успешно, трябва просто да преброим масива, използвайки $size
  • $reduce помага да се сумира стойността на масива на size

Монго скриптът е даден по-долу.

db.colA.aggregate([
  {
    $lookup: {
      from: "colB",
      let: {
        bid: "$_id"
      },
      pipeline: [
        {
          $match: {
            $or: [
              {
                is_delete: false
              },
              {
                is_delete: {
                  "$exists": false
                }
              }
            ]
          }
        },
        {
          $unwind: "$items"
        },
        {
          $match: {
            $expr: {
              $eq: [
                "$items._id",
                "$$bid"
              ]
            }
          }
        },
        
      ],
      as: "data"
    }
  },
  {
    $project: {
      count: {
        $reduce: {
          input: "$data",
          initialValue: 0,
          in: {
            $add: [
              "$$value",
              "$$this.items.size"
            ]
          }
        }
      }
    }
  }
])

Работеща Mongo playground




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Опциите [useMongoClient] не се поддържат

  2. Как да заредите данни в MongoDB, работещ в хост, от вътрешността на Docker, работещ на същата машина?

  3. Копиране на база данни в Mongoose

  4. Работещ метеор в клъстер и промени в реално време

  5. Как да създадете схема на Mongoose от JSON