Как получить документы с использованием запроса оптимального диапазона с Mongo Expression в случае Couch DB? - PullRequest
0 голосов
/ 03 июля 2018

Предположим, у меня есть 200 документов в моей базе данных с именем "person", и я хочу получить документы в диапазоне от 60 до 70, а затем, как бы я поступил в случае CouchDB. Прямо сейчас я использую выражение mongo и параметр 'skip' для ранжирование запросов, но как только размер пропуска увеличивается, время выполнения запроса также увеличивается, есть ли альтернатива параметру 'skip'? В RDBMS мы можем легко получать данные, используя нижний предел и верхний предел, но как бы я поступил в случае CouchDB?

Вот мой запрос

$getDocs = '{
    "selector": {
        "name": {"$ne": "null"}
    },
    "fields": ["_id", "_rev", "name", "email" ],
    "sort": [{"name": "asc" }],
    "limit": 10,
    "skip": '.$skip.'
}';

Я пытаюсь выполнить разбиение на страницы с PHP и CouchDB, используя Mango Expression и показывая 10 записей на странице.

Смотрите изображение , когда вы нажимаете на изображение, которое вы видите в моем URL-адресе, что я нахожусь на странице 7, что означает, что мне нужно получить документы в диапазоне от 61 до 70, и для этого я использую выше запрос. В приведенном выше запросе я передаю лимит, равный 10, поскольку мне нужно только показать 10 документов на страницу, а также я использую пропуск для пропуска 60 документов, поскольку я нахожусь на странице 7. Таким образом, проблема возникла, как только Количество страниц увеличивается, количество пропускаемых документов также увеличивается, поэтому увеличивается время выполнения запроса. Предположим, что если я на странице 1500, то на странице 1500 мне нужно показать документы между 15001 и 15010, и для этого мне нужно пропустить 15000 документов и пропуск такого количества документов занимают время почти 7 секунд, что довольно много. Так есть ли способ решить эту проблему?

1 Ответ

0 голосов
/ 04 июля 2018

Для запросов Mango вы должны использовать закладки. Полную документацию можно найти здесь

Preview:

Запросы манго поддерживают разбиение на страницы через поле закладки. Каждый ответ _find содержит закладку - токен, который CouchDB использует, чтобы определить, с какого места возобновить выполнение последующих запросов. Чтобы получить следующий набор результатов запроса, добавьте закладку, полученную в предыдущем ответе, к следующему запросу. Не забудьте оставить селектор на прежнем уровне, иначе вы получите неожиданные результаты. Для разбивки на страницы в обратном направлении вы можете использовать предыдущую закладку для возврата предыдущего набора результатов.

Обратите внимание, что наличие закладки не гарантирует наличия большего количества результатов. Вы можете проверить, достигли ли вы конца набора результатов, сравнив число результатов, возвращаемых с запрошенным размером страницы - если результатов возвращено <предел, больше нет. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...