2013-07-10 7 views
8

Ich bin mit den MongoDB Aggregations Rahmen und muß den absoluten Wert eines Betragsfeld nehmen, die ich sowohl in dem Projektteil verwenden und der Gruppenteil, ex:Absolutwert mit MongoDB Aggregation Rahmen

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

....

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

Wie nehmen Sie den absoluten Wert des ‚Betrag‘ Feld in diesem Fall? Ich war nicht in der Lage, es in der Dokumentation zu finden (vielleicht ist es nicht verfügbar?)

Antwort

12

Es ist nicht direkt verfügbar, aber Sie können es tun, um eine $cond Operator und einen $subtract innerhalb eines $project so (als JavaScript-Objekt) :

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

Also, wenn amount < 0, dann 0 - amount verwendet wird, ansonsten amount direkt verwendet wird.

UPDATE

Ab die 3.2 Freisetzung von MongoDB, können Sie den neuen $abs Aggregations Ausdruck Operator können dies direkt tun:

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

Perfect! Vielen Dank. – Mellop

+2

Oder als Alternative, Sie sollten in der Lage sein $ mit '-1' zu multiplizieren: '{$ multiplizieren: [-1, '$ betrag']}' ' – WiredPrairie

+0

@AshutoshPriyadarshy ((-1) * (- 1))/(- 1) ist immer noch -1, das ist also falsch. – joao