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ć.