2013-07-10 2 views
8

sto utilizzando il framework di aggregazione MongoDB e la necessità di prendere il valore assoluto di un campo di quantità, che uso sia nella porzione di progetto e la parte di gruppo, ad esempio:valore assoluto con quadro MongoDB aggregazione

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

....

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

Come si fa a prendere il valore assoluto del campo 'importo' in questo caso? Non ero in grado di trovare nella documentazione (forse non è disponibile?)

risposta

12

Non è direttamente disponibile, ma è possibile farlo utilizzando un operatore di $cond e $subtract all'interno di un $project come questo (come un oggetto JavaScript) :

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

quindi, se amount < 0, quindi 0 - amount viene utilizzato, altrimenti amount viene utilizzato direttamente.

UPDATE

Alla 3.2 rilascio di MongoDB, è possibile utilizzare la nuova aggregazione $abs operatore espressione a farlo direttamente:

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

Perfetto! Grazie. – Mellop

+2

Oppure, in alternativa, dovresti essere in grado di '$ moltiplicare' per' -1': '{$ moltiplicare: [-1, '$ importo']}' – WiredPrairie

+0

@AshutoshPriyadarshy ((-1) * (- 1))/(- 1) è ancora -1, quindi non è corretto. – joao