MongoDB REST API динамическое разбиение на страницы данных

Я реализую REST API с Express и Mongoose. Я застрял с задачей разбить результаты на страницы для коллекции с большим количеством документов. Document-это сообщение в социальных сетях с такими полями , как created_at, updated_at и score .

Обычная реализация подкачки с использованием ограничения и номера страницы не работает из-за природы данных. Сообщения могут быть удалены или добавлены во время просмотра результатов.

Я мог бы реализовать разбиение на страницы на основе диапазона, как предложено в документации MongoDB.
Последние элементы на странице created_at можно использовать для запроса следующей страницы.

Post.find({ created_at: { $gt: req.query.next } })

Но что делать, если я хочу отсортировать результаты по баллам, которые не уникальны или все баллы одинаковы?

2 ответа

  1. Есть несколько способов сделать это, но в вашем случае я бы предложил создать условия поиска / сортировки динамично и использовать их в вашем заявлении find.

    Из моей головы просто, чтобы дать вам идею:

    var MyFilter = {};
    var MySort = {};
    if (req.query.created_at != undefined) {
        MyFilter = { created_at : { $gte : req.query.created_at) } };
    }
    
    if (req.query.sortOn != undefined){
        MySort = { req.query.sort : 1 };
    }
    
    Post.find(MyFilter)
    .sort(MySort)
    .exec(function (err, posts) {
        ===do your stuff===
    });