Đây là cách bạn sẽ làm điều đó bằng cách sử dụng quy trình tổng hợp 4 giai đoạn
- Sắp xếp theo quốc gia và theo xếp hạng theo cách bạn đã làm
- Nhóm theo quốc gia và đẩy tất cả thông tin chi tiết về người chơi vào một mảng
- Cái này là cái móc sắt. Sử dụng
project
với$arrayElemAt
để lấyith
người chơi được xếp hạng cho từng quốc gia tương ứng -
Sử dụng lại dự án để cung cấp cho bạn đối tượng ở định dạng mong muốn
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" } })
Xem lấy màn hình bên dưới để biết 2nd Highest Rated Players
. Vì đây là những 0-indexed
, iTH_RATING
biến trong truy vấn được thay thế bằng 1. Để có được những người chơi được xếp hạng cao nhất, hãy thay thế bằng 0, v.v.