MongoDB聚合框架的绝对值

Mel*_*lop 8 mongodb aggregation-framework

我正在使用MongoDB聚合框架,需要获取金额字段的绝对值,我在项目部分和组部分中使用,ex:

'$project' => {
          'amount' => 1,
          '_id' => 0
        }
Run Code Online (Sandbox Code Playgroud)

....

    '$group' => { 
      'total' => {'$sum' => '$amount'}
    }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您如何获取"金额"字段的绝对值?我无法在文档中找到它(也许它不可用?)

Joh*_*yHK 12

它不能直接使用,但可以使用一个做$cond运营商和$subtract内部的$project这样的(如JavaScript对象):

{ $project: {
  amount: {
    $cond: [
      { $lt: ['$amount', 0] },
      { $subtract: [0, '$amount'] }, 
      '$amount'
    ]
}}}
Run Code Online (Sandbox Code Playgroud)

因此,如果amount < 0,则0 - amount使用,否则amount直接使用.

UPDATE

从MongoDB 的3.2版本开始,您可以使用新的$abs聚合表达式运算符直接执行此操作:

{ $project: { amount: { $abs: '$amount' } }
Run Code Online (Sandbox Code Playgroud)

  • 或者,作为替代方案,你应该能够`$ multiply`乘以`-1`:`{$ multiply:[ - 1,'$ amount']}` (2认同)