2016-09-21 180 views
2

我想能够创建一个字段newField = someFunction(currentDocument),但它看起来像这不被支持。是吗?我知道我可以在map reduce框架内完成这项工作,但我需要保留在汇总框架atm中。对于一些边缘的情况下,我能得到的东西的工作,例如:Mongo聚合 - 自定义函数来创建字段

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

很简单地创建一个字段等于2a+b但是这看起来有点小题大做,效率低下。

回答

2

您不能在您的聚合管道中使用自定义函数;一切都必须使用内置的操作员完成。

这就是说,你可以迄今为止在$project使用arithmetic operators你有什么改进:

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

以上意味深长:

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

我发现这一点。这很好,可能足够满足我的需要。谢谢! – Guig