Для того чтобы посчитать сумму полей в 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".