2016-09-21 18 views
2

フィールドをnewField = someFunction(currentDocument)として作成したいと考えていますが、これはサポートされていないようです。それは...ですか?私はマップの枠組みの中でこれを行うことができますが、私は集約フレームワークatm内にとどまる必要があります。いくつかのエッジケースでは、私は、例えば、仕事に物事を取得することができます。Mongo集約 - フィールドを作成するカスタム関数

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

は非常に単純2a+bに等しいフィールドを作成しますが、それはやり過ぎと非効率的なように見えます。

答えて

2

集計パイプラインでカスタム関数を使用することはできません。組み込みの演算子を使用してすべてを実行する必要があります。

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

以上の表情:

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

私はこれを発見して、あなたが$projectarithmetic operatorsを使用することにより、これまで持っているものに向上させることができ、言っ

。これは素晴らしく、おそらく私が必要とするもののために十分です。ありがとう! – Guig

関連する問題