2016-09-21 412 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