Takto byste to udělali pomocí 4fázového agregačního potrubí
- Seřaďte podle zemí a hodnocení, jak jste to již udělali
- Seskupit podle země a umístit všechny podrobnosti o hráči do pole
- Tohle je rozhodující. Použijte
project
pomocí$arrayElemAt
získatith
hodnoceného hráče pro každou z příslušných zemí -
Použijte znovu projekt, abyste získali objekt v požadovaném formátu
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" } })
Podívejte se na snímek obrazovky níže pro 2nd Highest Rated Players
. Protože jsou 0-indexed
, iTH_RATING
proměnná v dotazu je nahrazena 1. Chcete-li získat hráče s nejvyšším hodnocením, nahraďte je 0, tak dále a tak dále.