Абсолютное значение с платформой агрегации MongoDB

Я использую структуру агрегации MongoDB, и мне нужно взять абсолютное значение поля суммы, которое я использую как в части проекта, так и в части группы, например:

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

....

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

Как вы берете абсолютное значение поля «сумма» в этом случае? Я не смог найти его в документах (может быть, он недоступен?)


person Mellop    schedule 10.07.2013    source источник


Ответы (1)


Это недоступно напрямую, но вы можете сделать это, используя оператор $cond и $subtract внутри $project, как это (как объект JavaScript):

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

Итак, если amount < 0, то используется 0 - amount, иначе amount используется напрямую.

ОБНОВЛЕНИЕ

Начиная с версии 3.2 MongoDB, вы можете использовать новый $abs, чтобы сделать это напрямую:

{ $project: { amount: { $abs: '$amount' } }
person JohnnyHK    schedule 10.07.2013
comment
Или, в качестве альтернативы, вы должны иметь возможность $multiply от -1: { $multiply: [-1, '$amount'] } - person WiredPrairie; 10.07.2013
comment
@AshutoshPriyadarshy ((-1)*(-1))/(-1) по-прежнему равно -1, так что это неверно. - person joao; 14.12.2015