Пагинация в API

Опубликовано: 28 Декабря, 2022

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() являются более выгодным способом разбиения на страницы.

Важные моменты, на которые следует обратить внимание при сортировке:

  1. Сортировка будет происходить по столбцу. Его значения должны быть уникальными, и тогда только один может наблюдать, как сортировка выполняется эффективно.
  2. В противном случае вместе с указанным столбцом всегда старайтесь комбинировать столбец _id, так как столбец _id должен содержать только уникальные значения.
  3. Среди доступных столбцов столбец может быть предоставлен в порядке возрастания, а другой столбец может быть предоставлен в порядке убывания.

Следовательно, с помощью механизмов sort() как limit(), так и skip() предоставляют результаты с разбивкой на страницы более удобным способом.