Agregacja grup MongoDB

Agregacja Grup Mongodb



Agregacja to procedura wyodrębniania danych z kolekcji MongoDB. Przetwarza wiele dokumentów i podaje szacunkowe wyniki. Agregacja w MongoDB ma kilka operatorów i metod realizujących różne zadania. Wśród tych operatorów operator $group grupuje dokumenty dla każdego unikalnego grupowania i porządkuje je zgodnie ze zdefiniowanym wyrażeniem. Operator grupy jest istotny w MongoDB, ponieważ ułatwia szeroki zakres manipulacji danymi. Poniżej przedstawiono agregację $group w przykładzie MongoDB wraz z różnymi akumulatorami.

Jak działa agregacja grup w MongoDB?

Operator $group powinien być używany do grupowania dokumentów wejściowych zgodnie z określonym wyrażeniem _id. Następnie powinien zwrócić pojedynczy dokument z łącznymi wartościami dla każdej oddzielnej grupy. Na początek wdrożenia stworzyliśmy kolekcję „Książki” w MongoDB. Po utworzeniu kolekcji „Książki” wstawiliśmy dokumenty powiązane z różnymi dziedzinami. Dokumenty są wstawiane do kolekcji za pomocą metody insertMany(), ponieważ zapytanie do wykonania jest pokazane poniżej.

>db.Books.insertMany([

{
_id:1,
tytuł: „Anna Karenina”,
cena: 290,
rok: 1879,
status_zamówienia: 'W magazynie',
autor: {
'nazwa': 'Lew Tołstoj'
}
},
{
_id:2,
tytuł: „Zabić drozda”,
cena: 500,
rok: 1960,
status_zamówienia: 'brak w magazynie',
autor: {
'nazwa': 'Harper Lee'
}
},
{
_id:3,
tytuł: „Niewidzialny człowiek”,
cena: 312,
rok: 1953,
status_zamówienia: 'W magazynie',
autor: {
'imię': 'Ralph Ellison'
}
},
{
_id:4,
tytuł: „Ukochany”,
cena: 370,
rok:  1873,
status_zamówienia: 'brak_w magazynie',
autor: {
'imię': 'Toni Morrison'
}
},
{
_id:5,
tytuł: „Rzeczy się rozpadają”,
cena: 200,
rok:  1958,
status_zamówienia: 'W magazynie',
autor: {
'name': 'Chinua Achebe'
}
},
{
_id:6,
tytuł: „Kolor purpury”,
cena: 510,
rok:  1982,
status_zamówienia: 'brak w magazynie',
autor: {
'imię': 'Alice Walker'
}
}
])

Dokumenty są pomyślnie przechowywane w kolekcji „Książki” bez napotkania żadnego błędu, ponieważ dane wyjściowe są potwierdzane jako „prawdziwe”. Teraz użyjemy tych dokumentów z kolekcji „Książki” do przeprowadzenia agregacji „$group”.









Przykład nr 1: Użycie agregacji $group



Tutaj pokazano proste użycie agregacji $group. Zapytanie agregujące najpierw wprowadza operator „$group”, a następnie operator „$group” dalej przetwarza wyrażenia w celu wygenerowania zgrupowanych dokumentów.





>db.Books.aggregate([

{ $grupa:{ _id:'$autor.nazwa'} }

])

Powyższe zapytanie operatora $group jest określone z polem „_id”, aby obliczyć sumę wartości dla wszystkich dokumentów wejściowych. Następnie pole „_id” jest alokowane z polem „$author.name”, które tworzy inną grupę w polu „_id”. Oddzielne wartości $author.name zostaną zwrócone, ponieważ nie obliczamy żadnych skumulowanych wartości. Wykonanie zapytania agregującego $group daje następujące dane wyjściowe. Pole _id zawiera wartości autorów.nazwiska.



Przykład nr 2: Użycie agregacji $group z akumulatorem $push

Przykład agregacji $group wykorzystuje dowolny akumulator, który został już wspomniany powyżej. Ale możemy użyć akumulatorów w agregacji $group. Operatorami akumulatorów są te, które są używane w polach dokumentu wejściowego innych niż te, które są „zgrupowane” pod „_id”. Załóżmy, że chcemy wepchnąć pola wyrażenia do tablicy, a następnie wywołać akumulator „$push” w operatorze „$group”. Przykład pomoże ci lepiej zrozumieć akumulator „$push” grupy „$group”.

>db.Książki.agregacja(

[

{ $grupa: { _id: '$_id', rok: { $push: '$rok' } } }

]

).piękny();

Tutaj chcemy zgrupować datę roku publikacji danych książek w tablicy. W tym celu należy zastosować powyższe zapytanie. Zapytanie agregujące jest dostarczane z wyrażeniem, w którym operator „$group” pobiera wyrażenie pola „_id” i wyrażenie pola „rok”, aby uzyskać rok grupy za pomocą akumulatora $push. Dane wyjściowe pobrane z tego konkretnego zapytania tworzą tablicę pól roku i przechowują w niej zwrócony zgrupowany dokument.

Przykład nr 3: Wykorzystanie agregacji $group z akumulatorem „$min”.

Następnie mamy akumulator „$min”, który jest używany w agregacji $group, aby uzyskać minimalną pasującą wartość z każdego dokumentu w kolekcji. Wyrażenie zapytania dla akumulatora $min podano poniżej.

>db.Books.aggregate([

{
$grupa:{
_ID:{
tytuł: '$tytuł',
status_zamówienia: '$status_zamówienia'
},
minCena:{$min: '$cena'}
}
}
])

Zapytanie ma wyrażenie agregujące „$group”, w którym pogrupowaliśmy dokument dla pól „title” i „order_status”. Następnie udostępniliśmy akumulator $min, który pogrupował dokumenty, pobierając wartości cen minimalnych z niezgrupowanych pól. Kiedy uruchomimy to zapytanie $min accumulator poniżej, zwróci ono pogrupowane dokumenty według tytułu i statusu zamówienia w sekwencji. Na pierwszym miejscu pojawia się cena minimalna, a na końcu najwyższa cena dokumentu.

Przykład nr 4: Użyj agregacji $group z akumulatorem $sum

Aby uzyskać sumę wszystkich pól liczbowych za pomocą operatora $group, wdrażana jest operacja $sum accumulator. Ten akumulator uwzględnia wartości nieliczbowe w kolekcjach. Ponadto używamy tutaj agregacji $match z agregacją $group. Agregacja $match akceptuje warunki zapytania podane w dokumencie i przekazuje dopasowany dokument do agregacji $group, która następnie zwraca sumę dokumentu dla każdej grupy. Dla akumulatora $sum zapytanie przedstawiono poniżej.

>db.Books.aggregate([

{ $match:{ status_zamówienia:'W magazynie'}},

{ $group:{ _id:'$author.name', totalBooks: { $sum:1 } }

}])

Powyższe zapytanie agregacji rozpoczyna się od operatora $match, który pasuje do wszystkich „order_status”, których status to „In-Stock” i jest przekazywany do grupy $ jako dane wejściowe. Następnie operator $group ma wyrażenie akumulacyjne $sum, które zwraca sumę wszystkich książek w magazynie. Zauważ, że „$sum:1” dodaje 1 do każdego dokumentu należącego do tej samej grupy. Dane wyjściowe tutaj pokazały tylko dwa zgrupowane dokumenty, które mają „order_status” powiązany z „In-Stock”.

Przykład 5: Użyj agregacji $group z agregacją $sort

Operator $group jest tutaj używany z operatorem „$sort”, który służy do sortowania zgrupowanych dokumentów. Następujące zapytanie ma trzy kroki do operacji sortowania. Najpierw jest faza $match, następnie faza $group, a ostatnia to faza $sort, która sortuje zgrupowany dokument.

>db.Books.aggregate([

{ $dopasowanie:{ status_zamówienia:'brak w magazynie'}},

{ $grupa:{ _id:{ nazwa_autora :'$autor.nazwa'}, totalBooks: { $sum:1} } },

{ $sort:{ nazwa_autora: 1}}

])

Tutaj pobraliśmy dopasowany dokument, którego „order_status” jest niedostępny. Następnie dopasowany dokument jest wprowadzany do etapu $group, który grupuje dokument z polem „authorName” i „totalBooks”. Wyrażenie $group jest powiązane z akumulatorem $sum do całkowitej liczby książek „niedostępnych”. Zgrupowane dokumenty są następnie sortowane za pomocą wyrażenia $sort w porządku rosnącym, ponieważ „1” oznacza tutaj porządek rosnący. Posortowany dokument grupowy w określonej kolejności jest uzyskiwany w następującym wyniku.

Przykład nr 6: Użyj agregacji $group dla odrębnej wartości

Procedura agregacji grupuje również dokumenty według pozycji przy użyciu operatora $group w celu wyodrębnienia odrębnych wartości pozycji. Miejmy wyrażenie zapytania tej instrukcji w MongoDB.

>db.Books.aggregate( [ { $group : { _id : '$tytuł' } } ]).pretty();

Zapytanie agregujące jest stosowane do kolekcji Books w celu uzyskania odrębnej wartości dokumentu grupowego. Grupa $ tutaj przyjmuje wyrażenie _id, które zwraca różne wartości, ponieważ wprowadziliśmy do niego pole „tytuł”. Dane wyjściowe dokumentu grupowego są uzyskiwane po uruchomieniu tego zapytania, które zawiera grupę nazw tytułów w polu _id.

Wniosek

Poradnik miał na celu rozjaśnienie koncepcji operatora agregacji $group służącego do grupowania dokumentu w bazie danych MongoDB. Podejście agregujące MongoDB poprawia zjawisko grupowania. Struktura składni operatora $group jest pokazana na przykładowych programach. Oprócz podstawowego przykładu operatorów $group, zastosowaliśmy go również z niektórymi akumulatorami, takimi jak $push, $min, $sum, oraz operatorami, takimi jak $match i $sort.