与子文档项目计算的总和

时间:2017-10-20 07:09:42

标签: node.js mongodb mongoose aggregation-framework

我发票模型如下

{
...

"itemDetails": [
            {
                "item":  "593a1a01bbb00000043d9a4c",
                "purchasingPrice": 100,
                "sellingPrice": 150,
                "qty": 200,
                "_id": "59c39c2a5149560004173a05",
                "discount": 0
            }
        ],
        "payments": [],
...

}

我需要计算项目副总金额或卖价 - 折扣。

我看到了$sum运营商,但无法找到与item._id进行分组的方式

1 个答案:

答案 0 :(得分:1)

如果您希望获得按房产分组的总数"内部"一个数组,那么你总是需要$unwind。如果你需要申请"数学"在通过$sum累积之前,请使用math operators。例如$subtract在这种情况下:

Model.aggregate([
  { "$unwind": "$itemDetails" },
  { "$group": {
    "_id": "$itemDetails.item",
    "salePrice": { 
      "$sum": {
        "$subtract": [ "$itemDetails.sellingPrice", "$itemDetails.discount" ]
      }
    }
  }}
])

当然假设itemDetails.item实际上与不同发票中的项目相同。