MongoDB Запрос Sort() и Limit() с упорядочиванием по примерам
⚡ Умное резюме
MongoDB Модификаторы запроса Sort() и Limit() определяют, сколько документов возвращает запрос и в каком порядке. Метод limit() ограничивает количество результатов, а sort() упорядочивает документы в порядке возрастания или убывания, используя значения 1 или -1.

Что такое модификации запроса?
Монго БД предоставляет модификаторы запросов, такие как предложения «limit» и «Orders», чтобы обеспечить большую гибкость при выполнении запросов. Мы рассмотрим следующие модификаторы запроса.
MongoDB Ограничить результаты запроса
Этот модификатор используется для ограничения количества документов, возвращаемых в наборе результатов запроса. Следующий пример показывает, как это можно сделать.
db.Employee.find().limit(2).forEach(printjson);
Code объяснение
- Приведенный выше код использует функцию find, которая возвращает все документы в коллекции, но затем использует предложение limit, чтобы ограничить количество возвращаемых документов до двух.
Результат
Если команда выполнена успешно, будет показан следующий вывод
Вывод ясно показывает, что, поскольку существует модификатор ограничения, в результирующем наборе возвращаются не более двух записей на основе ObjectId в порядке возрастания.
MongoDB Сортировать по убыванию
Можно указать порядок возвращаемых документов на основе возрастания или убывания любого ключа в коллекции. Следующий пример показывает, как это можно сделать.
db.Employee.find().sort({Employeeid:-1}).forEach(printjson)
Code объяснение
- Приведенный выше код использует функцию сортировки, которая возвращает все документы в коллекции, но затем использует модификатор для изменения порядка возврата записей. Здесь -1 указывает, что мы хотим вернуть документы в порядке убывания идентификатора сотрудника.
Если команда выполнена успешно, будет показан следующий вывод
Результат
Вывод ясно показывает, что документы возвращаются в порядке убывания идентификатора сотрудника.
Порядок возрастания определяется значением 1.
MongoDB Сортировать по возрастанию
Подобно тому, как функция sort() может возвращать документы в порядке убывания, она также может возвращать их в порядке возрастания. Порядок возрастания определяется значением 1 в объекте sort. Это упорядочивает документы от наименьшего значения к наибольшему, что полезно для перечисления записей от самых старых к самым новым или от А до Я.
В следующем примере все документы сотрудников сортируются по идентификатору сотрудника (Employeeid) в порядке возрастания:
db.Employee.find().sort({Employeeid:1}).forEach(printjson)
Вот как работает этот запрос:
- Функция find() извлекает все документы из коллекции Employee.
- Функция sort({Employeeid:1}) упорядочивает результаты по полю Employeeid, от наименьшего значения к наибольшему.
- Функция forEach(printjson) выводит каждый документ в удобочитаемом формате JSON.
При выполнении этой команды документы отображаются в порядке возрастания Employeeid. Последовательность по возрастанию также является направлением по умолчанию, поэтому, оставив значение равным 1, вы получите порядок от меньшего к большему по выбранному полю. Чтобы изменить результат на обратный, просто измените значение с 1 на -1, а также вы можете использовать функцию limit() для возврата только первых нескольких отсортированных записей.
MongoDB Пропустить (Skip()) для пагинации
Метод skip() сообщает MongoDB Функция skip() игнорирует заданное количество документов, прежде чем вернуть остальные. Сама по себе функция skip() редко бывает полезна, но в сочетании с limit() она создает пагинацию, позволяя отображать результаты по одной странице за раз.
В следующем примере пропускаются первые два сотрудника, и возвращаются следующие два:
db.Employee.find().skip(2).limit(2).forEach(printjson)
Для создания постраничной навигации следуйте этому шаблону:
- Определите размер страницы, например, 2 документа на странице.
- Чтобы получить значение пропуска, умножьте размер страницы на номер страницы минус один.
- Передайте это значение в функцию skip(), а размер страницы — в функцию limit().
Например, на странице 1 используется skip(0).limit(2), на странице 2 — skip(2).limit(2), а на странице 3 — skip(4).limit(2). Всегда добавляйте также sort(), чтобы порядок документов оставался стабильным на разных страницах. Обратите внимание, что очень большие значения skip могут замедлять работу с большими коллекциями, потому что MongoDB По-прежнему сканирует и отбрасывает пропущенные документы; постраничная навигация по диапазонам работает быстрее в больших масштабах.
Сортировка по нескольким полям в MongoDB
MongoDB Можно сортировать по нескольким полям одновременно. Вы перечисляете поля в объекте сортировки в порядке приоритета, и MongoDB Сначала сортировка производится по первому полю, затем для разрешения неоднозначностей используется следующее поле, и так далее.
В следующем примере сотрудники сортируются по имени в порядке возрастания, а сотрудники с одинаковым именем — по идентификатору сотрудника (Employeeid) в порядке убывания:
db.Employee.find().sort({EmployeeName:1, Employeeid:-1}).forEach(printjson)
Порядок ключей в объекте сортировки имеет значение: сначала применяется EmployeeName, потому что он стоит первым. Такая сортировка по нескольким ключам полезна для отчетов, где вы группируете данные по одному полю, а затем ранжируете их внутри каждой группы. Для достижения наилучшей производительности при работе с большими коллекциями создайте составной индекс, который соответствует полям и направлениям, используемым в сортировке.


