Умножение и добавление чисел в массив - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть поле, которое соответствует этому:

"invoice_items" : [
    {
        "price" : 10,
        "quantity" : 600
    },
    {
        "price" : 499.99,
        "quantity" : 1
    }
]

Я искал агрегирование и получение итога, поэтому умножьте цену на количество и сложите их вместе, в массиве может быть любое количество элементов. Последнее, что я попробовал, было:

[{
    $match: {
        "is_closed": false
    }
},
{
    $group: {
        _id: "$_id",
        invoice_items: "$invoice_items"
    }
},
{
    $project: {
        _id: 0,
        count: {
            $multiply: ["$invoice_items.price", "$invoice_items.quantity"]
        }
    }
}]

То, что я думал, вернет что-то, но оно только допустило ошибку, сказав, что «поле invoice_items» должно быть объектом-накопителем »

1 Ответ

0 голосов
/ 06 ноября 2018

Вы можете использовать ниже агрегации

В основном вам нужно использовать $map для перебора массива invoice_items и $sum для добавления всех invoice_items значения

db.collection.aggregate([
  { "$project": {
    "count": {
      "$sum": {
        "$map": {
          "input": "$invoice_items",
          "in": { "$multiply": ["$$this.price", "$$this.quantity"] }
        }
      }
    }
  }}
])
...