MongoDB: как сгруппировать и суммировать


Вы можете использовать следующий синтаксис для группировки и подсчета в MongoDB:

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

Обратите внимание, что field_name1 — это поле, по которому вы хотите сгруппировать, а field_name2 — это поле, которое вы хотите суммировать.

В следующих примерах показано, как использовать этот синтаксис с набором команд со следующими документами:

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

Пример 1: Группировать по и суммировать

Мы можем использовать следующий код для группировки по полю «позиция» и подсчета суммы баллов для каждой позиции.

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

Это возвращает следующие результаты:

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

Это говорит нам:

  • Игроки с позицией «Вперед» имеют в сумме 48 очков.
  • У игроков с позицией «Страж» в сумме 64 очка.
  • У игроков с позицией «Центр» в сумме 19 очков.

Пример 2: группировка и суммирование (затем сортировка)

Мы можем использовать следующий код, чтобы найти сумму баллов для каждой позиции и автоматически отсортировать результаты в порядке возрастания :

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

Это возвращает следующие результаты:

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

Результаты сортируются по количеству баллов в порядке возрастания (от меньшего к большему).

Мы можем использовать -1 в аргументе count вместо сортировки результатов в порядке убывания :

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

Это возвращает следующие результаты:

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

Обратите внимание, что результаты отсортированы по точкам в порядке убывания (от большего к меньшему).

Примечание.Полную документацию по $group можно найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в MongoDB:

MongoDB: как подсчитать различные значения в поле
MongoDB: как сгруппировать по нескольким полям
MongoDB: как группировать и считать

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.