Расчеты в MongoDB

#mongodb #aggregation-framework #aggregation

Вопрос:

У меня есть что-то вроде:

     [
{
    ....
    a: 100
    b: 60
},
{
    ....
    a: 130
    b: 40
},
{
    ....
    a: 120
    b: 60
}
]
 

и я хочу вычислить:
сумма(a)/сумма(b): (350/160) и поместите ее в новое поле
Заранее спасибо

Комментарии:

1. Вы можете выполнить обновление с помощью функции конвейера обновления с агрегацией. Для выполнения вычислений существуют арифметические операторы агрегации.

Ответ №1:

Сначала вы должны использовать $group , чтобы получить сумму всех a и b (сгруппировать по _id:1 ), затем использовать $project , чтобы получить a/b (игровая площадка Монго):

 db.collection.aggregate([
  {
    "$group": {
      "_id": 1,
      "sumA": {
        "$sum": "$a"
      },
      "sumB": {
        "$sum": "$b"
      },
      
    }
  },
  {
    "$project": {
      "aDIVb": {
        "$divide": [
          "$sumA",
          "$sumB"
        ]
      }
    }
  }
])
 

Ссылки: $группа, $сумма, $проект и $разделение