在数组中相乘并相加

时间:2018-11-06 16:26:27

标签: mongodb mongodb-query aggregation-framework

我有一个与此匹配的字段:

"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 :(得分:2)

您可以使用以下汇总

基本上,您需要使用$map遍历invoice_items数组,并使用$sum来添加所有invoice_items

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