Voici comment procéder en utilisant un pipeline d'agrégation en 4 étapes
- Trier par pays et par note comme vous l'avez déjà fait
- Regrouper par pays et regrouper tous les détails des joueurs dans un tableau
- Celui-ci est décisif. Utiliser
project
avec$arrayElemAt
pour obtenir leith
joueur classé pour chacun des pays respectifs -
Utilisez à nouveau le projet pour vous donner l'objet dans le format souhaité
db.getCollection('players').aggregate( { $sort: {country: 1, rating: -1} }, { $group: { _id: "$country", players: {$push: {name: "$name", rating: "$rating", event: "$event"}} } }, { $project: { player: {$arrayElemAt: ["$players", iTH_RATING]} } }, { $project: { name: "$player.name", rating: "$player.rating", event: "$player.event" } })
Voir la capture d'écran ci-dessous pour les 2nd Highest Rated Players
. Comme ceux-ci sont 0-indexed
, le iTH_RATING
variable dans la requête est remplacée par 1. Pour obtenir les joueurs les mieux notés, remplacez-la par 0, ainsi de suite.