Сортировка по условию в mongodb - PullRequest
0 голосов
/ 16 июня 2020

Не знаю, как подойти к этой проблеме. Был бы очень признателен, если бы кто-нибудь сказал мне, возможно ли это, и если да, то как.

У меня есть коллекция в Mon go, и каждый документ в этой коллекции имеет поле под названием Rank. Когда пользователь нажимает кнопку, у меня есть доступ к req.user (с некоторыми настраиваемыми полями), потому что я использую паспорт для аутентификации (как OAUTH, так и локальный).

Вот что я ищу.

На следующей странице после нажатия кнопки я хочу отобразить 20 человек, которые имеют рейтинг выше требуемого ранга пользователя. Итак, предположим, что я req.user и мой рейтинг равен 24, я хочу, чтобы все записи с рейтингом от 4 до 23 отсортированы от 4 до 23. Возможно ли это? Пожалуйста, направьте.

Так выглядит отдельный документ в моей коллекции, а поле Rank находится где-то посередине

{
    "_id" : ObjectId("5ed3c6c2776524724f2fae63"),
    "Player_Name" : "Abhimanyu Sen",
    "Player_ID" : "P0001",
    "Player_ActivePlayer" : "N",
    "Edition_1_Rank" : "0",
    "Edition_2_Rank" : "0",
    "Edition_3_Rank" : "67",
    "Edition_4_Rank" : "113",
    "Edition_5_Rank" : "185",
    "Player_Owner" : "N",
    "Edition5_TeamOwner" : "N",
    "Edition6_TeamOwner" : "N",
    "Edition1_Performance" : "Did Not Play",
    "Edition2_Performance" : "Did Not Play",
    "Edition3_Performance" : "Round of 32 - Challengers Cup",
    "Edition4_Performance" : "Did Not Play",
    "Edition5_Performance" : "Did Not Play",
    "Total_Tournament_Matches_Played" : 8,
    "Total_Tournament_Matches_Won" : 0,
    "Total_Tournament_Matches_Lost" : 8,
    "Total_Tournament_Matches_Points" : 3.0,
    "Total_Challenge_Matches_Played" : 0,
    "Total_Challenge_Matches_Won" : 0,
    "Total_Challenge_Matches_Lost" : 0,
    "Total_Challenge_Matches_Points" : 0.0,
    "Total_Matches_Played" : 8,
    "Total_Matches_Won" : 0,
    "Total_Matches_Lost" : 8,
    "Total_Points" : 3.0,
    "Total_Games_Won" : 0,
    "Winning_Percentage" : 0.0,
    "Player_FDR" : 0.0,
    "Rank" : 185,
    "Player_ELORating" : "",
    "Player_IsHeavyTraveller" : "",
    "Player_NickName" : "",
    "Player_ImageURL" : "",
    "Player_CompanyName" : "",
    "Player_Designation" : "",
    "Player_DateOfBirth" : "",
    "Player_TelephoneNumber" : "",
    "Player_Website" : "",
    "Player_LinkedinProfile" : "",
    "Player_FBLink" : "",
    "Player_InstagramLink" : "",
    "Player_TwitterLink" : "",
    "Player_Interests" : "",
    "Player_Blog" : "",
    "Player_Posts" : "",
    "Player_Messages" : "",
    "Total_Games_Lost" : 24,
    "Total_Weighted_Points" : 2.65
}

1 Ответ

1 голос
/ 16 июня 2020

Можно сделать так:

 db.getCollection('your-collection').aggregate([
        {$match:{
            Rank: {$gt:24}
            }},
         {$sort:{Rank:1}},
         { $limit: 20
             }
        ])

Ставить ранг пользователя вместо 24

...