MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB Query, ordina quindi prendi l'ennesimo documento per il gruppo

Ecco come lo faresti utilizzando una pipeline di aggregazione a 4 fasi

  1. Ordina in base al paese e alla valutazione come hai già fatto
  2. Raggruppa per paese e inserisci tutti i dettagli del giocatore in un array
  3. Questo è il fattore decisivo. Usa project con $arrayElemAt per ottenere il ith giocatore valutato per ciascuno dei rispettivi paesi
  4. Usa di nuovo il progetto per darti l'oggetto nel formato desiderato

    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"
            }
    })
    

Vedi la schermata qui sotto per 2nd Highest Rated Players . Poiché questi sono 0-indexed , il iTH_RATING la variabile nella query viene sostituita con 1. Per ottenere i giocatori con il punteggio più alto, sostituire con 0, e così via.