2013-07-10 211 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