2013-07-10 111 views
8

我使用MongoDB的聚合框架,需要采取量场的绝对值,这是我在这两个项目的部分和组部分使用,例如:用MongoDB的聚合框架绝对值

'$project' => { 
      'amount' => 1, 
      '_id' => 0 
     } 

....

'$group' => { 
     'total' => {'$sum' => '$amount'} 
    } 

你怎么走“量”字段的在这种情况下,绝对价值?我没能找到它的文档(也许是不可用?)

回答

12

它不能直接使用,但可以使用一个$cond运营商和$project这样内$subtract(如JavaScript对象)做:

{ $project: { 
    amount: { 
    $cond: [ 
     { $lt: ['$amount', 0] }, 
     { $subtract: [0, '$amount'] }, 
     '$amount' 
    ] 
}}} 

所以,如果amount < 0,然后0 - amount使用,否则amount直接使用。

UPDATE

由于3.2发布的MongoDB的,你可以使用新的$abs聚集表达式运算符直接做到这一点:

{ $project: { amount: { $abs: '$amount' } } 
+0

完美!谢谢。 – Mellop

+2

或者,作为一种选择,您应该可以用'-1'乘以'$ multiply':'{$ multiply:[-1,'$ amount']}' – WiredPrairie

+0

@AshutoshPriyadarshy((-1)*( - 1 ))/( - 1)仍然是-1,所以这是不正确的。 – joao