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

пребройте полето на поддокумент и общата сума в mongodb

MongoDB конвейер за агрегиране е на разположение, за да реши вашия проблем. Получавате подробности от обработвания от мен масив с $unwind и след това с помощта на $group за да "сумирате" сумите:

db.collection.aggregate([
    // Unwind the array to de-normalize as documents
    { "$unwind": "$details" },

    // Group on the key you want and provide other values
    { "$group": { 
        "_id": "$details.itemcode",
        "itemname": { "$first": "$details.itemname" },
        "totalprice": { "$sum": "$details.price" },
        "totalqty": { "$sum": "$details.qty" }
    }}
])

В идеалния случай искате $match влезте там, за да филтрирате първо всички неподходящи данни. Това е основно MongoDB заявка и приема всички същите аргументи и оператори.

Повечето тук наистина са прости. $unwind е нещо като "JOIN" в SQL, с изключение на това, че във вградена структура "join" вече е направено, така че вие ​​просто "денормализирате", както би направило съединението между релации на таблица "едно към много", но само в рамките на самия документ. Той основно „повтаря“ частите на „родителския“ документ в масива за всеки член на масива като нов документ.

След това $group работи на ключ, като в "GROUP BY", където "ключът" е _id стойност. Всичко там е „различно“ и всички други стойности се събират от „оператори за групиране“.

Това е мястото, където операции като $first влезте. Както е описано на страницата с ръководство, това взема "първата" стойност от "границата на групиране", спомената в "ключа" по-рано. Искате това, защото всички стойности на това поле е „вероятно“ да бъдат еднакви, така че това е логичен избор просто да изберете „първото“ съвпадение.

Накрая има $sum групиращ оператор, който прави това, което трябва да се очаква. Всички предоставени стойности под „ключа“ се „добавят“ или „сумират“, за да се получи обща сума. Точно като SQL SUM() .

Също така имайте предвид, че всички $ префиксирани имена там е как рамката за агрегиране се занимава с променливи за имена на "поле/свойство" в рамките на текущия документ, който се обработва. "Нотация с точки" се използва за препратка към вградените „полета/свойства“, вложени в името на родителско свойство.

Полезно е да научите агрегирането в MongoDB. За общите заявки е това, което всичко отвъд елементарния израз "SELECT" е за SQL. Не само за „групиране“, но и за други манипулации.

Прочетете документацията на всички оператори за агрегиране и също така разгледайте съпоставяне на SQL към агрегиране в документацията като общо ръководство, ако сте запознати с SQL като начало. Помага да се обяснят концепциите и показва някои неща, които могат да бъдат направени.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Актуализация на MongoDB (вмъкване на списък с елементи в масив)

  2. Преоформете масив, който се съхранява в колекция и експортирайте в CSV

  3. Как да актуализирате стойностите на масива mongodb

  4. MongoDB db.copyDatabase се проваля при неоторизирано

  5. Проста реализация на маркиране с MongoDB