MongoDB聚合框架中的绝对值

8

我正在使用MongoDB聚合框架,需要对一个金额字段取绝对值,在项目部分和组部分都会用到,例如:

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

....

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

在这种情况下,如何获取"amount"字段的绝对值?我没有在文档中找到相关信息(也许不可用?)

1个回答

12

虽然直接不可用,但您可以使用$cond操作符和$subtract运算符在$project中实现它,就像这样(作为JavaScript对象):

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

如果 amount < 0,那么使用 0 - amount,否则直接使用 amount

更新

从 MongoDB 3.2 版本开始,你可以使用新的 $abs 聚合表达式操作符来直接完成此操作:

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

2
或者,作为替代方案,您应该能够通过$multiply乘以-1:{ $multiply: [-1, '$amount'] } - WiredPrairie
@AshutoshPriyadarshy ((-1)*(-1))/(-1) 仍然是 -1,因此这是不正确的。 - joao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接