Mongo聚合 - 创建字段的自定义函数

时间:2016-09-21 01:48:16

标签: mongodb aggregation-framework

我希望能够将字段创建为newField = someFunction(currentDocument),但看起来不支持此字段。是吗?我知道我可以在map reduce框架中执行此操作,但我需要保留在聚合框架atm中。对于某些边缘情况,我可以让事情发挥作用,例如:

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

非常简单地创建一个等于2a+b的字段,但这看起来有点过分和低效。

1 个答案:

答案 0 :(得分:2)

您无法在汇总管道中使用自定义函数;一切都必须使用内置的操作符来完成。

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

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

或更具表现力:

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