首页 > 解决方案 > 数组内的数字相乘和相加

问题描述

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

"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'必须是一个累加器对象”

标签: mongodbmongodb-queryaggregation-framework

解决方案


您可以使用以下聚合

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

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

推荐阅读