Beginilah cara Anda melakukannya menggunakan alur agregasi 4 tahap
- Urutkan berdasarkan negara dan peringkat seperti yang sudah Anda lakukan
- Kelompokkan menurut negara dan masukkan semua detail pemain ke dalam larik
- Yang ini penentunya. Gunakan
project
dengan$arrayElemAt
untuk mendapatkanith
pemain berperingkat untuk masing-masing negara -
Gunakan proyek lagi untuk memberi Anda objek dalam format yang diinginkan
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" } })
Lihat tangkapan layar di bawah untuk 2nd Highest Rated Players
. Karena ini 0-indexed
, iTH_RATING
variabel dalam query diganti dengan 1. Untuk mendapatkan nilai tertinggi pemain ganti dengan 0, seterusnya dan seterusnya.