2013-10-24 206 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率)。

希望这会有所帮助!