2017-10-20 132 views
1

我有發票型號如下總和與子文檔項目計算

{ 
... 

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

} 

我需要計算項目,副總額或賣出價 - 打折。

我看到$sum操作,但無法找到一個方法來組item._id

+0

組或每個數組項目?因爲''item._id「'意味着你對每個數組項都意味着什麼。 –

+0

我將有很多發票,並且每個發票都是itemDetails,我需要獲得物品副銷售。 – user2473015

回答

1

如果你希望得到的「內部」數組的屬性組合共有,那麼你總是需要$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