Как посчитать сумму полей MongoDB?

Для того чтобы посчитать сумму полей в MongoDB, можно использовать агрегационный фреймворк.

Агрегационный фреймворк в MongoDB предоставляет мощные возможности для выполнения высокоуровневых операций агрегации данных, таких как группировка, сортировка, фильтрация и вычисления на нескольких коллекциях в одном запросе.

Для подсчета суммы полей можно использовать оператор $group в сочетании с оператором $sum. Оператор $group группирует документы по заданным полям, а оператор $sum вычисляет сумму указанного поля для каждой группы.

Приведу пример, для более ясного объяснения.

Предположим, у нас есть коллекция orders, которая содержит следующие документы:

[
  { "_id": 1, "product": "A", "quantity": 5, "price": 10 },
  { "_id": 2, "product": "B", "quantity": 10, "price": 15 },
  { "_id": 3, "product": "C", "quantity": 3, "price": 8 },
  { "_id": 4, "product": "A", "quantity": 2, "price": 10 },
  { "_id": 5, "product": "B", "quantity": 8, "price": 15 }
]

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

db.orders.aggregate([
  { $group: {
    _id: null,
    totalQuantity: { $sum: "$quantity" }
  }}
])

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

[
  { "_id": null, "totalQuantity": 28 }
]

В данном случае, мы группируем все документы в одну группу (представленную _id: null), и вычисляем сумму значения поля quantity для каждой группы с помощью оператора $sum.

Если вам нужно вычислить сумму полей с использованием дополнительных условий, можно добавить оператор $match перед оператором $group. Например, если нам нужно посчитать сумму поля quantity только для продукта "A", можно изменить запрос следующим образом:

db.orders.aggregate([
  { $match: { product: "A" }},
  { $group: {
    _id: null,
    totalQuantity: { $sum: "$quantity" }
  }}
])

Результатом выполнения этого запроса будет:

[
  { "_id": null, "totalQuantity": 7 }
]

В данном случае, перед оператором $group мы добавили оператор $match, который фильтрует только документы с полем product равным "A".