使用匹配和组聚合函数的Mongodb聚合

时间:2013-10-24 21:23:07

标签: json mongodb

我希望通过“user_id”,“real_currency_spend”和“paid_currency”来汇总“paid_amount”的总和。

这个想法是按用户按货币类型获得总计(以避免用美元,英镑等计算日元“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的货币放入数组格式,但如果必须这样做,则必须完成。

1 个答案:

答案 0 :(得分: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:{}}}

请注意我使用了外部对象$ change,它将包含货币的变化率。我是MongoDB的新手,所以我不知道如何在你的聚合中添加一个外部变量(可能只是像我一样使用它们,但不确定,抱歉)。

如果您正在为每种货币运行汇总,那么应该更容易,忘记我写的条件运算符并获得$ project的想法并显示三种货币(一种来自数据,另一种是$ multiply的变化率)。

希望这有帮助!