MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

policz pole poddokumentu i całkowitą kwotę w mongodb

MongoDB potok agregacji jest dostępny, aby rozwiązać Twój problem. Pobierasz szczegóły z tablicy moje przetwarzanie za pomocą $unwind a następnie przy użyciu $group aby "zsumować" sumy:

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" }
    }}
])

Idealnie potrzebujesz $match wejdź tam, aby najpierw odfiltrować wszelkie nieistotne dane. Jest to w zasadzie zapytanie MongoDB i przyjmuje wszystkie te same argumenty i operatory.

Większość tutaj jest naprawdę prosta. $unwind jest trochę jak "JOIN" w SQL, z tą różnicą, że w osadzonej strukturze "join" jest już wykonane, więc po prostu "denormalizujesz", tak jak robiłoby to sprzężenie między relacjami między tabelami "jeden do wielu", ale tylko w obrębie sam dokument. Zasadniczo "powtarza" "rodzice" części dokumentu do tablicy dla każdego członka tablicy jako nowy dokument.

Następnie $group działa z kluczem, jak w "GROUP BY", gdzie "klucz" to _id wartość. Wszystko, co jest tam „odrębne”, a wszystkie inne wartości są gromadzone przez „operatory grupujące”.

W tym miejscu operacje takie jak $first wejdź. Jak opisano na stronie podręcznika, pobiera ona „pierwszą” wartość z „granicy grupowania” wspomnianej we wcześniejszym „kluczu”. Potrzebujesz tego, ponieważ wszystkie wartości tego pola są „prawdopodobnie” takie same, więc logicznym wyborem jest po prostu wybranie „pierwszego” dopasowania.

Wreszcie jest $sum operator grupujący, który robi to, czego należy oczekiwać. Wszystkie podane wartości pod „kluczem” są „dodawane” lub „sumowane”, aby uzyskać sumę. Podobnie jak SQL SUM() .

Zwróć też uwagę, że wszystkie $ nazwy z przedrostkiem istnieje sposób, w jaki struktura agregacji radzi sobie ze zmiennymi dla nazw „pola/właściwości” w bieżącym przetwarzanym dokumencie. "Notacja z kropkami" służy do odwoływania się do osadzonych „pól/właściwości” zagnieżdżonych w nazwie właściwości nadrzędnej.

Warto nauczyć się agregacji w MongoDB. Jest dla ogólnych zapytań tym, czym cokolwiek poza podstawowym poleceniem „SELECT” jest dla SQL. Nie tylko do „grupowania”, ale także do innych manipulacji.

Przeczytaj dokumentację wszystkich operatorów agregacji a także spójrz na Mapowanie SQL do agregacji w dokumentacji jako ogólny przewodnik, jeśli na początku znasz język SQL. Pomaga wyjaśnić pojęcia i pokazuje pewne rzeczy, które można zrobić.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jaki jest odpowiednik polecenia powłoki collection.getIndexes() w pymongo?

  2. Jak używać modyfikatora aktualizacji $push w MongoDB i C# podczas aktualizowania tablicy w dokumencie?

  3. Jak zachować wartości null na końcu sortowania w Mongoose?

  4. nie mogę pobrać danych z bazy danych po wielu zadeklarowanych schematach (mongoose + express + mongodb

  5. usuwanie zduplikowanych wartości tablicy z mongodb