sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB Query, sortera och ta sedan n:te dokumentet för grupp

Så här skulle du göra det med en 4-stegs aggregeringspipeline

  1. Sortera landmässigt och betygsmässigt som du redan har gjort
  2. Gruppera efter land och skjut in alla spelardetaljer i en array
  3. 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
  4. 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.



  1. Kan jag ansöka om Every in aggregerad fråga i MongoDB?

  2. Lagra GeoJSON-polygoner i MongoDB

  3. Hur frågar man efter dokument i mongodb (pymongo) där alla nyckelord finns i ett fält?

  4. Mongoose-gruppfråga i node.js / express route