MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB Query, сортирайте и след това вземете n-тия документ за група

Ето как бихте го направили, като използвате 4-етапен тръбопровод за агрегиране

  1. Сортирайте по държава и по рейтинг, както вече направихте
  2. Групирайте по държава и вкарайте всички подробности за играчите в масив
  3. Това е решаващият момент. Използвайте project с $arrayElemAt за да получите ith оценен играч за всяка от съответните държави
  4. Използвайте project отново, за да ви даде обекта в желания формат

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

Вижте екранна снимка по-долу за 2nd Highest Rated Players . Тъй като те са 0-indexed , iTH_RATING променливата в заявката се заменя с 1. За да получите играчи с най-висок рейтинг, заменете с 0, така нататък и така нататък.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да спрете mongo DB с една команда

  2. Агрегиране на MongoDb за филтриране на списък въз основа на идентификатори, присъстващи в обект на масив от всички документи от същата колекция

  3. MongoDB:Какво е обединяване на връзки и изчакване?

  4. Резултатите от MapReduce изглеждат ограничени до 100?

  5. Вмъкнете стойност на конкретна позиция в масив в MongoDB