【问题标题】:Absolute value with MongoDB aggregation frameworkMongoDB聚合框架的绝对价值
【发布时间】:2015-12-09 01:31:29
【问题描述】:

我使用的是MongoDB聚合框架,需要取一个amount字段的绝对值,我在project部分和group部分都用到,例如:

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

....

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

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

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

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

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

    所以如果amount < 0,则使用0 - amount,否则直接使用amount

    更新

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

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

    【讨论】:

    • 或者,作为替代方案,您应该能够 $multiply by -1: { $multiply: [-1, '$amount'] }
    • @AshutoshPriyadarshy ((-1)*(-1))/(-1) 仍然是-1,所以这是不正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    相关资源
    最近更新 更多