2016-11-05 14 views
0

は、次のプロパティを持つスキーマを考えてみましょう:モンゴーズ射影で別の計算フィールドを使用して計算フィールドを作成する方法は?

{ 
    maxDmg: Number, 
    attacks: Number 
} 

私は別の計算結果フィールドからの結果が含まれ、計算フィールドを作成する必要があり、何かのように:それは計算列のように見える

$project { 
    maxDmg: true, 
    attacks: true, 
    effDmg: { $multiply: ["$maxDmg", 0.70] }, 
    dps: { $divide: [ {$multiply:["$effDmg","$attacks"]}, 60 ] } 
} 

しかし、 'effDmg'は別の計算列内では参照できません。回避策はありますか?

答えて

1

私はあなたが既存の計算された変数にアクセスすることはできませんが、let演算子を使用して同じ計算変数を作成し、別の計算された変数で使用することができます。お役に立てれば。

$project: { 
    maxDmg: true, 
    attacks: true, 
    effDmg: { 
     $multiply: ["$maxDmg", 0.70] 
    }, 
    dps: { 
     $let: { 
      vars: { 
       effDmg: { 
        $multiply: ["$maxDmg", 0.70] 
       } 
      }, 
      in: { 
       $divide: [{ 
        $multiply: ["$$effDmg", "$attacks"] 
       }, 60] 
      } 
     } 
    } 
} 

更新

あなたは一つのプロジェクト内での計算を維持することができ、後で、あなたはそれらを投影できます。この方法では、少なくとも変数を再利用することになります。

$project: { 
    maxDmg: true, 
    attacks: true, 
    together: { 
     $let: { 
      vars: { 
       effDmg: { 
        $multiply: ["$maxDmg", 0.70] 
       } 
      }, 
      in: { 
       dps: { 
        $divide: [{ 
         $multiply: ["$$effDmg", "$attacks"] 
        }, 60] 
       }, 
       effDmg: "$$effDmg" 
      } 
     } 
    } 
} 

サンプル出力:

{ 
    "maxDmg": 34, 
    "attacks": 45, 
    "together": { 
     "dps": 17.849999999999998, 
     "effDmg": 23.799999999999997 
    } 
} 
+0

HRM。計算が実際に私がこの例で使用したよりも複雑なので、私が望んでいた答えではなく、コードの重複を避けたかったのです。それでも、何か新しいことを学んだので、ありがとう! – amnesia

+0

が更新されました。それが役立つかどうかを見てください。別のプロジェクトを追加して値を抽出することができます。 – Veeram

+0

ああ、良い点;私はしばしば明らかに見落とします。これは私のために働く、ありがとう。 – amnesia

関連する問題