我希望能够将字段创建为newField = someFunction(currentDocument)
,但看起来不支持此字段。是吗?我知道我可以在map reduce框架中执行此操作,但我需要保留在聚合框架atm中。对于某些边缘情况,我可以让事情发挥作用,例如:
items.aggregate([
{
$project: {
_tmp: ['$a', '$a', '$b'],
},
},
{
$unwind: '$_tmp',
},
{
$group: {
_id: '$_id',
aab: { $sum: '$_tmp' }
}
},
]);
非常简单地创建一个等于2a+b
的字段,但这看起来有点过分和低效。
答案 0 :(得分:2)
您无法在汇总管道中使用自定义函数;一切都必须使用内置的操作符来完成。
也就是说,您可以使用$project
中的arithmetic operators来改进您目前所拥有的内容:
items.aggregate([
{$project: {aab: {$add: ['$a', '$a', '$b']}}}
])
或更具表现力:
items.aggregate([
{$project: {aab: {$add: [{$multiply: [2, '$a']}, '$b']}}}
])