MongoDB Запрос Sort() и Limit() с упорядочиванием по примерам

⚡ Умное резюме

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

  • 🔢 Ограничить результаты: Метод limit() ограничивает количество документов, возвращаемых запросом, например, limit(2) возвращает две записи.
  • ⬇️ Сортировка по убыванию: Функция sort({field:-1}) возвращает документы в порядке убывания выбранного поля.
  • 🇧🇷 Сортировка по возрастанию: Функция sort({field:1}) возвращает документы в порядке возрастания, что также является направлением сортировки по умолчанию.
  • ⏭️ Перейти к постраничной навигации: Метод skip() игнорирует ряд документов, а в сочетании с limit() он формирует пагинацию.
  • 🧷 Несколько ключей: Функция sort() принимает несколько полей, сортируя по первому ключу и разрешая совпадения по следующему.
  • 🇧🇷 Readable Выход: Выполнение цепочки вызовов forEach(printjson) выводит каждый возвращенный документ в чистом формате JSON.

MongoDB Запросы Sort() и Limit()

Что такое модификации запроса?

Монго БД предоставляет модификаторы запросов, такие как предложения «limit» и «Orders», чтобы обеспечить большую гибкость при выполнении запросов. Мы рассмотрим следующие модификаторы запроса.

MongoDB Ограничить результаты запроса

Этот модификатор используется для ограничения количества документов, возвращаемых в наборе результатов запроса. Следующий пример показывает, как это можно сделать.

db.Employee.find().limit(2).forEach(printjson);

Code объяснение

  • Приведенный выше код использует функцию find, которая возвращает все документы в коллекции, но затем использует предложение limit, чтобы ограничить количество возвращаемых документов до двух.

Результат

Если команда выполнена успешно, будет показан следующий вывод

MongoDB Ограничить результаты запроса

Вывод ясно показывает, что, поскольку существует модификатор ограничения, в результирующем наборе возвращаются не более двух записей на основе ObjectId в порядке возрастания.

MongoDB Сортировать по убыванию

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

db.Employee.find().sort({Employeeid:-1}).forEach(printjson)

Code объяснение

  • Приведенный выше код использует функцию сортировки, которая возвращает все документы в коллекции, но затем использует модификатор для изменения порядка возврата записей. Здесь -1 указывает, что мы хотим вернуть документы в порядке убывания идентификатора сотрудника.

Если команда выполнена успешно, будет показан следующий вывод

Результат

MongoDB Сортировать по убыванию

Вывод ясно показывает, что документы возвращаются в порядке убывания идентификатора сотрудника.

Порядок возрастания определяется значением 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)

Для создания постраничной навигации следуйте этому шаблону:

  1. Определите размер страницы, например, 2 документа на странице.
  2. Чтобы получить значение пропуска, умножьте размер страницы на номер страницы минус один.
  3. Передайте это значение в функцию 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, потому что он стоит первым. Такая сортировка по нескольким ключам полезна для отчетов, где вы группируете данные по одному полю, а затем ранжируете их внутри каждой группы. Для достижения наилучшей производительности при работе с большими коллекциями создайте составной индекс, который соответствует полям и направлениям, используемым в сортировке.

Часто задаваемые вопросы (FAQ)

Без функции sort(), MongoDB Возвращает документы в естественном порядке, который обычно соответствует их порядку на диске и не гарантируется. Для предсказуемого порядка всегда добавляйте явную сортировку (sort()) для поля, подобного _id.

Логически, MongoDB Функция sort() всегда применяется перед limit(), независимо от порядка их применения. Это означает, что limit() возвращает верхние документы отсортированного результата, а не случайное подмножество, которое затем сортируется.

Сортировка больших наборов результатов без индекса приводит к сортировке в оперативной памяти, которая завершается с ошибкой, как только превышается лимит памяти. Создание индекса по полю сортировки позволяет MongoDB Эффективно возвращает упорядоченные результаты.

Искусственный интеллект может преобразовать простой запрос, например, «пять новых сотрудников», в запрос find().sort().limit() с правильным направлением сортировки и подсчетом количества. Он также объясняет каждый модификатор, чтобы новички могли освоить этот шаблон.

Да. Искусственный интеллект может анализировать план запроса, обнаруживать сортировку в оперативной памяти и рекомендовать индекс, необходимый для поддержки сортировки. Это помогает разработчикам ускорить сортировку и ограничить количество запросов к большим коллекциям.

Подведем итог этой публикации следующим образом: