Я пытаюсь создать таблицу лидеров гольфа, основанную на нескольких раундах, что означает, что игрок мог сыграть 2 раунда с одним и тем же matchid.Это довольно просто, если есть только один раунд, я делаю это так:
db.roundScores.find( { "matchId": matchId } ).sort({"data.scoreTotals.toPar": 1});
Но если в матче больше одного раунда, я немного не в курсе, как я группирую каждого игрока, добавить оценки за раунды, а затем отсортировать их?
Я иду по этому пути, но не уверен, что это правильный путь?
var allRounds = db.rounds.find( { "matchId": matchId } );
var playerScores = [];
while( allRounds.hasNext() ) {
var thisRound = allRounds.next();
var allScores = db.roundScores.find( { "roundId": thisRound._id.$oid } );
var i = 0;
while( allScores.hasNext() ) {
var thisScore = allScores.next();
if(i > 0){
// Should be updating the playerScores array finding the object for the player, But how???
} else {
// Creating a new object and adding it to the playerScores array //
playerScores.push({
"id": thisScore.playerId,
"toPar": thisScore.scoretotals.toPar,
"points": thisScore.scoretotals.points
});
}
i++;
}
}
Я действительно надеюсь, что кто-то можетНаправь меня в правильном направлении.
Заранее спасибо: -)
------------ РЕДАКТИРОВАТЬ -----------
Вот примеры на документах
{"roundId": "8745362738", "playerId": "12653426518", "toPar": 3, "points": 27}
{"roundId": "8745362738", "playerId": "54354245566", "toPar": -1, "points": 31}
{"roundId": "7635452678", "playerId": "12653426518", "toPar": 1, "points": 29}
{"roundId": "7635452678", "playerId": "54354245566", "toPar": 2, "points": 23}
Результат должен быть:
1 playerId 54354245566 toPar 1 points 10
2 playerId 12653426518 toPar 4 points 2