Пагинация в API
MongoDB — эффективная база данных NoSQL. Он в значительной степени используется в индустрии программного обеспечения, поскольку имеет открытый исходный код, легко настраивается, проще в обслуживании, с точки зрения обновления и переносимости, он играет важную роль и, следовательно, больше похож на базу данных NoSQL.
В этом руководстве давайте посмотрим, как выполнить разбивку на страницы в запросе MongoDB. Для этого предположим, что установлена MongoDB (Compass) или более ранние версии MongoDB.
Текущая база данных — geeksforgeeks, и у нее есть имя коллекции, называемое «авторские данные».
Давайте сначала запросим их:
use geeksforgeeks db.authordetails.find().pretty()
Соответствующие детали показаны на изображении ниже:
Предположим, что в коллекции присутствует много документов. Тогда будет сложно отобразить их в Mongo Shell или, если мы передадим запрос без разбивки на страницы, сложнее отобразить результаты во внешнем интерфейсе. Следовательно, нам нужен механизм ограничения документов.
Прежде чем перейти к просмотру limit(), давайте посмотрим, сколько документов доступно. Его можно легко восстановить с помощью
1. лимит():
Этот метод фиксирует ограничение на курсор (результирующий вывод документа MongoDB). В базе данных SQL есть оператор LIMIT. Точно так же метод limit() помогает ограничить вывод документа.
Его необходимо предоставить перед извлечением каких-либо документов из коллекции.
Это помогает максимизировать производительность. т.е. если нам нужно только 5 документов, мы можем легко ограничить это с помощью этого метода.
использование limit(): изначально для нашей коллекции сведений об авторе было 5 документов (но в реальном примере или в выходных данных REST API, которые были сохранены в MongoDB, определенно должно быть больше документов).
Используя приведенный ниже запрос, мы можем получить только 2 документа.
db.authordetails.find().pretty().limit(2)
ПРИМЕЧАНИЕ. Вместо 2 мы можем указать, сколько документов нужно получить.
Ограничение: limit(value), где значение должно быть между -2^31 и 2^31. Если заданы другие значения, они игнорируются
Предоставление отрицательного значения, такого как -2 или около того, даст тот же результат, что и положительное значение. Разница между положительным значением и отрицательным значением метода limit() заключается в том, что при отрицательном значении курсор закрывается после возврата одного пакета результатов.
При установке limit(0) не будет никакого эффекта с limit(), т.е. никакого эффекта не наблюдается, когда задано limit(0).
С limit() и sort(): нам нужно добавить хотя бы одно поле в sort(), содержащее уникальные значения, и это нужно сделать перед передачей его методу limit().
Попробуйте выполнить сортировку по уникальным значениям, иначе повторяющиеся значения приведут к несогласованному порядку сортировки.
- Комбинация сортировки по возрастанию и лимита:
db.authordetails.find().sort( { “authorName” : 1}).limit(2).pretty()
- Комбинация сортировки по убыванию и лимита:
db.authordetails.find().sort( { “authorName” : -1}).limit(2).pretty()
Во время визуализации отчета во внешних инструментах, таких как ReactJS и AngularJS, комбинация сортировки и ограничения обеспечит эффективные результаты.
Таким образом, для разбивки на страницы, limit() широко используется и наряду с sort() имеет больше преимуществ.
2. пропустить():
Иногда бывают ситуации, когда некоторые документы пропускают, и это делается исключительно из-за требований. При пропуске (у него будет положительное 64-битное целое значение) в качестве аргумента процесс пропускает указанное количество документов, а остальные документы доступны для следующего этапа конвейера. Он попадает под агрегаты
Ограничение: $skip принимает положительное целое число. Начиная с MongoDB 5.0, $skip имеет ограничение на 64-битное целое число. Превышение этого ограничения приведет к ошибке недопустимого аргумента.
Давайте посмотрим на поведенческий результат пропуска ниже:
db.authordetails.aggregate([{$skip : 2}]).pretty()
Комбинация skip и sort(): хорошей практикой будет показывать вывод результатов с разбивкой на страницы во внешних инструментах, таких как ReactJS и AngularJS.
Приведенные ниже типы запросов очень полезны:
- Отсортированные по возрастанию результаты с разбивкой по страницам с использованием агрегации skip()
db.authordetails.aggregate ([ {$sort : { “authorName” : 1}}]).skip(3).pretty()
- Постраничные результаты отсортированы в порядке убывания с использованием агрегации skip():
db.authordetails.aggregate ([ {$sort : { “authorName” : -1}}]).skip(3).pretty()
Таким образом, используя skip (положительное значение), мы добиваемся разбиения на страницы. Сортировка и объединение с помощью limit()/skip() являются более выгодным способом разбиения на страницы.
Важные моменты, на которые следует обратить внимание при сортировке:
- Сортировка будет происходить по столбцу. Его значения должны быть уникальными, и тогда только один может наблюдать, как сортировка выполняется эффективно.
- В противном случае вместе с указанным столбцом всегда старайтесь комбинировать столбец _id, так как столбец _id должен содержать только уникальные значения.
- Среди доступных столбцов столбец может быть предоставлен в порядке возрастания, а другой столбец может быть предоставлен в порядке убывания.
Следовательно, с помощью механизмов sort() как limit(), так и skip() предоставляют результаты с разбивкой на страницы более удобным способом.