sql >> Database >  >> NoSQL >> MongoDB

MongoDB Query, sorteer en neem het nde document voor groep

Dit is hoe je het zou doen met behulp van een 4-traps aggregatiepijplijn

  1. Sorteer landgewijs en beoordelingsgewijs zoals je al hebt gedaan
  2. Groep op land en zet alle spelersgegevens in een array
  3. Dit is de afsluiter. Gebruik project met $arrayElemAt om de ith . te krijgen beoordeelde speler voor elk van de respectievelijke landen
  4. 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.



  1. Kan MongoDB een index gebruiken bij het controleren op het bestaan ​​van een veld met de operator $exists?

  2. Mongo-exporteren met één veld?

  3. Meerdere exemplaren van Redis uitvoeren op Centos

  4. Android/MongoDB:NoClassDefFoundError:com.mongodb.DBPortPool