Dit is hoe je het zou doen met behulp van een 4-traps aggregatiepijplijn
- Sorteer landgewijs en beoordelingsgewijs zoals je al hebt gedaan
- Groep op land en zet alle spelersgegevens in een array
- Dit is de afsluiter. Gebruik
project
met$arrayElemAt
om deith
. te krijgen beoordeelde speler voor elk van de respectievelijke landen -
Gebruik project opnieuw om u het object in het gewenste formaat te geven
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" } })
Zie onderstaande schermafbeelding voor 2nd Highest Rated Players
. Aangezien deze 0-indexed
. zijn , de iTH_RATING
variabele in de query wordt vervangen door 1. Om de hoogst gewaardeerde spelers te krijgen, vervangt u deze door 0, enzovoort.