2017-05-07 6 views
0

私はGROUPBY

{ 
"team1" :"ruby", 
"team2" :"jade", 
"winner" :"ruby" 
}, 
{ 
"team1" :"jade", 
"team2" :"ruby", 
"winner" :"jade" 
} 

私は考えることができ

{ 
"team" :"ruby", 
"wins" :1, 
"loss" :1 
}, 
{ 
"team" :"jade", 
"wins" :1, 
"loss" :1 
} 

唯一のものに特定のチームの勝利のないと損を見つける必要がありません。このコレクションを集約しようとしているパラレルMongoDBは3でありますこのようにグループの質問を行い、同じ名前でそれらを組み合わせる

aggregate(
      [{ 
       $group: { 
        _id: "$winner", 
        wins: { $sum: 1 } 
       } 
      } 
      ]) 

単一のクエリでSSES

答えて

1

あなたはwinslosesをカウントするteam$sum$cond$unwind & $group続いアレイなどのフィールドをマップするために[]ブラケットを使用することができます。

db.collection.aggregate({ 
    $project: { 
     winner: 1, 
     team: ["$team1", "$team2"] 
    } 
}, { 
    $unwind: "$team" 
}, { 
    $group: { 
     _id: "$team", 
     wins: { 
      $sum: { 
       $cond: [{ 
        $eq: ["$winner", "$team"] 
       }, 1, 0] 
      } 
     }, 
     loses: { 
      $sum: { 
       $cond: [{ 
        $eq: ["$winner", "$team"] 
       }, 0, 1] 
      } 
     } 
    } 
})