【问题标题】:Mongo aggregation - custom function to create fieldMongo 聚合 - 创建字段的自定义函数
【发布时间】:2016-09-21 01:48:15
【问题描述】:

我希望能够创建一个字段为newField = someFunction(currentDocument),但它似乎不受支持。是吗?我知道我可以在 map reduce 框架内做到这一点,但我需要留在聚合框架 atm 内。对于某些极端情况,我可以让事情正常工作,例如:

items.aggregate([
  {
    $project: {
      _tmp: ['$a', '$a', '$b'],
    },
  },
  {
    $unwind: '$_tmp',
  },
  {
    $group: {
      _id: '$_id',
      aab: { $sum: '$_tmp' }
    }
  },
]);

很简单地创建一个等于2a+b 的字段,但这看起来有点矫枉过正且效率低下。

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    您不能在聚合管道中使用自定义函数;一切都必须使用内置运算符完成。

    也就是说,您可以通过在 $project 中使用 arithmetic operators 来改进您目前所拥有的:

    items.aggregate([
        {$project: {aab: {$add: ['$a', '$a', '$b']}}}
    ])
    

    或者更形象地说:

    items.aggregate([
        {$project: {aab: {$add: [{$multiply: [2, '$a']}, '$b']}}}
    ])
    

    【讨论】:

    • 我发现了这一点。这很好,可能足以满足我的需要。谢谢!
    猜你喜欢
    • 2018-10-15
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 2022-01-12
    相关资源
    最近更新 更多