总和与子文档项目计算

问题描述:

我有发票型号如下总和与子文档项目计算

{ 
... 

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

} 

我需要计算项目,副总额或卖出价 - 打折。

我看到$sum操作,但无法找到一个方法来组item._id

+0

组或每个数组项目?因为''item._id“'意味着你对每个数组项都意味着什么。 –

+0

我将有很多发票,并且每个发票都是itemDetails,我需要获得物品副销售。 – user2473015

如果你希望得到的“内部”数组的属性组合共有,那么你总是需要$unwind。如果您需要在通过$sum积累之前申请“数学”,则请使用math operators。如$subtract在这种情况下:

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

当然假定该itemDetails.item实际上是通用于不同的发票的项目。

+0

它需要''_id“:”$ itemDetails.item“ – user2473015

+1

@ user2473015呃,在你[改变你的问题的结构](https://stackoverflow.com/revisions/46844005/3)之前它是正确的。您之前拥有'item'作为子文档,并拥有自己的属性。一旦已经有答案,你就不应该改变你的问题,因为上下文会丢失。即使您需要更改实际的实现方式,也应该回复问题中的结构。 –

+0

是的。我之前添加了人口结构。对不起。 – user2473015