Så här skulle du göra det med en 4-stegs aggregeringspipeline
- Sortera landmässigt och betygsmässigt som du redan har gjort
- Gruppera efter land och skjut in alla spelardetaljer i en array
- Den här är häftet. Använd
project
med$arrayElemAt
för att fåith
rankad spelare för vart och ett av respektive länder -
Använd project igen för att ge dig objektet i önskat format
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" } })
Se skärmbilden nedan för 2nd Highest Rated Players
. Eftersom dessa är 0-indexed
, iTH_RATING
variabeln i frågan ersätts med 1. För att få de högst rankade spelarna ersätts med 0, så vidare och så vidare.