2017-12-25 23 views
0

の配列のフィールドを合計し、私は私が私が探しています結果を得ることになっていますか見当がつかない。基本的に私はこのような文書があります。私が欲しいもの
マングース/ MongoDBは、私はMongoDBの/マングースにかなり新しいですサブ文書

{ 
    "playerId" : "", 
    "sessions" : [ 
     { 
      "start" : "", 
      "end" : "", 
      "join" : "", 
      "leave" : "", 
      "rounds" : [, 
       { 
        "name" : "roundName", 
        "weapons" : [ 
         { 
          "name" : "weaponName", 
          "kills" : 1, 
          "assits" : 1, 
          "deaths" : 1, 
          "shots" : 1, 
          "headshots" : 1 
         }, 
         { 
          "name" : "weaponName", 
          "kills" : 1, 
          "assits" : 1, 
          "deaths" : 1, 
          "shots" : 1, 
          "headshots" : 1 
         } 
        ] 
       }, 
       { 
        "name" : "roundName", 
        "weapons" : [ 
         { 
          "name" : "weaponName", 
          "kills" : 1, 
          "assits" : 1, 
          "deaths" : 1, 
          "shots" : 1, 
          "headshots" : 1 
         }, 
         { 
          "name" : "weaponName", 
          "kills" : 1, 
          "assits" : 1, 
          "deaths" : 1, 
          "shots" : 1, 
          "headshots" : 1 
         } 
        ] 
       }, 
       { 
        "name" : "roundName", 
        "weapons" : [ 
         { 
          "name" : "weaponName", 
          "kills" : 1, 
          "assits" : 1, 
          "deaths" : 1, 
          "shots" : 1, 
          "headshots" : 1 
         }, 
         { 
          "name" : "weaponName", 
          "kills" : 1, 
          "assits" : 1, 
          "deaths" : 1, 
          "shots" : 1, 
          "headshots" : 1 
         } 
        ] 
       } 
      ] 
     } 
    ] 
} 

をすべての武器の合計が含まれている各ラウンド(キル、死亡、アシスト、ヘッドショット、ショット)にフィールドを追加するクエリです。可能であれば、セッション全体で同じことが起こるはずです。どんな助けでも大歓迎です!

+0

質問を編集して、 。また、サンプルドキュメントから期待される出力を示すのが最善です。 – chridam

+0

私はちょうど私が必要としているものとサンプル文書をちょっと書きました。お役に立てれば! – Nicolas

答えて

0

次はあなたのセッション - >ラウンドでグループ化する統計情報のリストを与える必要があります。ここでの仮定は、1)コレクションの名前はshootingGame 2である )をフィールドの名前は$ sessions.Rounds.Weapons

db.shootingGame.aggregate(
    [ 
     {$group: { 
     _id: "$sessions.Rounds", 
     "sumkills": {$sum: "$sessions.Rounds.Weapons.kills" }, 
     "sumasists": {$sum: "$sessions.Rounds.Weapons.assists" }, 
     "sumdeaths": {$sum: "$sessions.Rounds.Weapons.deaths" }, 
     "sumheadshots": {$sum: "$sessions.Rounds.Weapons.headshots" }, 
     "sumshots": {$sum: "$sessions.Rounds.Weapons.shots" } 
    }} 
    ] 
) 
です

セッションごとにさらにグループ化するには、この結果を別のドキュメントに保存し、1回の呼び出しで別の$ sumグループを実行する必要があります。

+0

私はあなたのアプローチを試み、すべてのフィールドに値0を得ました。しかし、それは私の文書がどのように見えるかについての私の貧弱な説明のためかもしれません。したがって私は私の質問にサンプル文書を追加しました。 – Nicolas

関連する問題