2013-10-24 262 views
0

我期待通過「user_id」,「real_currency_spend」和「paid_currency」來聚合「paid_amount」的總和。使用匹配和組聚合函數的Mongo數據庫聚合

想法是通過貨幣類型(以獲得由用戶總數,以避免與美元,英鎊等

當前的代碼計數日元「paid_amount」:

{$match: {"paid_currency_type": "real_currency", "paid_amount": {$gt: 0}}} 
{$group: {_id:"$user_id", total: {$sum : "$paid_amount"}}} 

輸出的電流:

_id: 1121749754875670248  
total: #.## 

所需的輸出:

_id: ##### (equal to user_id) 
USD: #.## 
Yen: #.## 
Cur: #.## 

使用來自real_currency_name的每種貨幣類型組成字段名稱以及組成字段值的集合中每個用戶的總數。

我理想情況下不希望使用$push將貨幣置於每個ID的數組格式,但是如果必須完成......必須完成。

+6

您能否提供示例文檔? – zero323

+0

今天早上我再次嘗試這樣做時最終得到了一些東西:{$ group:{_id:「$ paid_currency_name」,total:{$ sum:「$ paid_amount」}}} – andrewwowens

回答

0

我是新來的MongoDB,但我會去爲$project和使用條件句(請注意代碼不檢查,只是一個「提示」):

{$match: {"paid_currency_type": "real_currency", "paid_amount": {$gt: 0}}} 
{$group: {_id:"$user_id", curr: 'real_currency', total: {$sum : 'paid_amount'}} 
{$project: {_id:'$_id',USD:{{$cond: [{$eq:{'$curr', 'USD']}, '$total', $multiply[$total,$change.usd.real_currency]}}, 
         Yen:{ you know what I mean ;-)}, 
         Cur:{}}} 

請注意我用了一個外部對象$改變,這將包含貨幣的變化率。我是MongoDB的新手,所以我不知道如何在你的聚合中添加一個外部變量(也許只是像我一樣使用它們,但不知道,對不起)。

如果您正在爲每種貨幣運行彙總,它應該會更容易,忘記我編寫的條件操作符,並獲取$ project的想法並顯示三種貨幣(一個來自數據,另一個來自變化的$ multiply率)。

希望這會有所幫助!