Mongodb: jak grupować i sumować


Do grupowania i zliczania w MongoDB możesz użyć następującej składni:

 db.collection.aggregate([
    { $group : { _id : " $field_name1 ", count :{ $sum : " $field_name2 "}}}
])

Pamiętaj, że nazwa_pola1 to pole, według którego chcesz grupować, a nazwa_pola2 to pole, według którego chcesz podsumować.

Poniższe przykłady pokazują, jak używać tej składni w przypadku zespołu windykacyjnego z następującymi dokumentami:

 db.teams.insertOne({team: " Mavs ", position: " Guard ", points: 31 })
db.teams.insertOne({team: " Spurs ", position: " Forward ", points: 22 })
db.teams.insertOne({team: " Rockets ", position: " Center ", points: 19 })
db.teams.insertOne({team: " Warriors ", position: " Forward ", points: 26 })
db.teams.insertOne({team: " Cavs ", position: " Guard ", points: 33 })

Przykład 1: grupowanie według i sumowanie

Możemy użyć poniższego kodu, aby pogrupować według pola „pozycja” i policzyć sumę punktów dla każdej pozycji.

 db.teams.aggregate([
    { $group : { _id : " $position ", count :{ $sum : " $points "}}}
])

Zwraca to następujące wyniki:

 { _id: ' Forward ', count: 48 }
{ _id: ' Guard ', count: 64 }
{ _id: ' Center ', count: 19 }

To nam mówi:

  • Gracze na pozycji „Atakujący” mają łącznie 48 punktów.
  • Zawodnicy na pozycji „Strażnik” mają łącznie 64 punkty.
  • Zawodnicy na pozycji „Środkowej” mają łącznie 19 punktów.

Przykład 2: grupuj według i dodawaj (następnie sortuj)

Możemy użyć poniższego kodu, aby znaleźć sumę punktów dla każdej pozycji i automatycznie posortować wyniki w kolejności rosnącej :

 db.teams.aggregate([
    { $group : { _id : " $position ", count :{ $sum : " $points "}}},
    { $sort : { count : 1}} 
])

Zwraca to następujące wyniki:

 { _id: ' Center ', count: 19 }
{ _id: ' Forward ', count: 48 }
{ _id: ' Guard ', count: 64 }

Wyniki sortowane są według punktów w porządku rosnącym (od najmniejszego do największego).

Możemy użyć -1 w argumencie count, aby posortować wyniki w kolejności malejącej :

 db.teams.aggregate([
    { $group : { _id : " $position ", count :{ $sum : " $points "}}},
    { $sort : { count :-1}} 
])

Zwraca to następujące wyniki:

 { _id: ' Guard ', count: 64 }
{ _id: ' Forward ', count: 48 }
{ _id: ' Center ', count: 19 }

Należy pamiętać, że wyniki są sortowane według punktów w kolejności malejącej (od największego do najmniejszego).

Uwaga : Pełną dokumentację $group znajdziesz tutaj .

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe operacje w MongoDB:

MongoDB: Jak policzyć różne wartości w polu
MongoDB: Jak grupować według wielu pól
MongoDB: Jak grupować i liczyć

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *