Как получить курсор для нумерации MongoDB по составному индексу - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь настроить запросы MongoDB для разбивки на страницы, но не могу использовать _id в качестве курсора.Кроме того, для производительности я не хочу использовать skip.

Моя коллекция карт должна быть заказана с автоматической индексацией в Mongoose, например:

Cards.index({"userId": 1, "cardExpiration": 1, "validated": 1, "opTS": -1, "_id": -1})

В клиентской части:Я должен показать список элементов, разделенных на 2 раздела: я пытаюсь сначала показать раздел «активный», а после того, как все элементы из раздела «активный» были разбиты на страницы, затем я покажу элементы из «старого»'section.

Карты активны , когда они еще не истекли и не были «проверены».Если они были проверены или устарели, они старые .

Запрос, который я пытался создать, был таким:

const setQuery = (cursor) => {
        let [section, id] = cursor.split('_')

        let query = {}
        query.userId = userId
        query.cardExpiration = {$gt: now}  
        if (id) query._id = {$lt: id}
        if (section == 'active') {
            query.validated = false
        } 
        if (section == 'old') {
            query.$or = [
                {'cardExpiration': {$lte: now}},
                {'validated': true}
            ]
        }
        return query
    }

Cards.find(query).limit(4)

Курсор пройденклиентом в качестве параметра для поиска, и должен быть sectionName_cursorNumber , например:

active_5c1ed0d1d50facca686a3700

или

old_5c1ed0d1d50facca686a37fd

с указанием текущего раздела и последнегокурсор возвращается для продолжения в следующей нумерации страниц.

Затем я выполняю запросы, начинающиеся с cursor = "active_", и добавляю часть курсора, пока количество возвращаемых элементов равно 4;и измените его на "old_", когда количество возвращенных предметов в первый раз будет меньше 4.Когда поиск типа old_5c1ed0d1d50facca686a37cc возвращает меньше 4, это конец списка.

Я пытался использовать _id - курсор, но он не работает - результаты не приходят в порядке, который я установил при индексации.И я не знаю, какую еще вещь использовать вместо курсора.

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

Возможно ли это?Или есть другой и лучший способ?

...