2017-05-07 1 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를 세 가지입니다 이런 식으로 그룹의 질문을하고 같은 이름으로 조합 해주세요.

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

이기는 것은 가능합니다. 단일 쿼리에서 SSES

답변

1

당신은 winsloses를 계산 $unwind & team$group$sum$cond 다음 배열로 필드를 매핑하는 [] 브래킷을 사용할 수 있습니다.

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] 
      } 
     } 
    } 
})