ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Сортировка результатов запроса в Mongoose: метод sort()

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Сортировка в Mongoose выполняется с помощью метода .sort({ поле: 1 }) для обеспечения сортировки по возрастанию и .sort({ поле: -1 }) для сортировки по убыванию.

JS
Скопировать код
// Сортировка по возрастанию: словно поднимаемся по летнице вверх
YourModel.find().sort({ поле: 1 }).exec();
// Сортировка по убыванию: словно спускаемся с вершины горы вниз
YourModel.find().sort({ поле: -1 }).exec();

Помните о значимости цепочки методов: .sort() необходимо вызывать сразу после .find(). Если хотите сортировать по нескольким критериям, добавьте их в объект: .sort({ поле1: 1, поле2: -1 }).

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Упорядочивание данных

Сортировка по нескольким критериям

Для упорядочивания по нескольким параметрам достаточно просто определить их приоритеты в объекте сортировки.

JS
Скопировать код
// Сначала по наиболее значимым параметрам, затем по менее важным
YourModel.find().sort({ основноеПоле: 1, второстепенноеПоле: -1 }).exec();

Сортировка строк с учетом регистра

Чтобы осуществить сортировку строк, не учитывая регистр, нужно задать коллацию для вашего языкового стандарта:

JS
Скопировать код
YourModel.find().collation({ locale: 'ru' }).sort({ строковоеПоле: 1 }).exec();

Сортировка с пагинацией

Для реализации пагинации метод .sort() можно сочетать с .limit() и .skip():

JS
Скопировать код
let размерСтраницы = 10;
let номерСтраницы = 2;
// Пролистываем страницы поочерёдно
YourModel.find()
  .sort({ поле: 1 })
  .skip(размерСтраницы * (номерСтраницы – 1))
  .limit(размерСтраницы)
  .exec();

Визуализация

Представим полки в библиотеке (📚), где книги — это документы mongoose, упорядоченные по году издания:

Markdown
Скопировать код
До сортировки (📚): [2018, 2021, 2019, 2017]

Библиотекарь (mongoose) расставляет их в порядке с помощью find().sort({ year: 1 }):

JS
Скопировать код
Collection.find().sort({ year: 1 }); // Сортировка по возрастанию
Markdown
Скопировать код
После сортировки (📚): [2017, 2018, 2019, 2021]

Теперь книги на полке расположены в хронологическом порядке — от старых изданий к новым.

Методы и типовые ошибки при сортировке

Правильное использование .exec()

Всегда используйте .exec() для инициализации запросов и получения промисов. Это упрощает код и ускоряет дальнейшую работу с then.

JS
Скопировать код
YourModel.find().sort({ поле: 1 }).exec().then(docs => { /* осуществляем действия с полученными результатами */ });

Сортировка вложенных полей

Для упорядочивания вложенных полей рекомендуется применить точечную нотацию:

JS
Скопировать код
YourModel.find().sort({ 'вложенное.поле': 1 }).exec();

Обработка ошибок

Обрабатывайте все возникающие ошибки, чтобы быстро находить проблемы, связанные с некорректным выбором полей или неправильной методикой сортировки:

JS
Скопировать код
YourModel.find().sort({ поле: 1 }).exec((err, docs) => {
  if (err) {
    // Необходимо разобраться с ошибкой!
  } else {
    // Всё идёт нормально, продолжаем работу...
  }
});

Оптимизация производительности сортировки

Для улучшения производительности при работе с большим объемом данных рекомендуется проводить сортировку по индексированным полям. Mongoose эффективно использует один и тот же индекс для фильтрации и сортировки данных.

Сортировка в конвейерах агрегаций

В агрегационных конвейерах используйте оператор $sort для упорядочивания данных:

JS
Скопировать код
YourModel.aggregate([{ $sort : { поле : 1 } }]);

Полезные материалы

  1. Mongoose v8.1.2: Документация API — для тех, кто доверяет только официальным источникам.
  2. cursor.sort() — Полное руководство по MongoDB — глубокое погружение в мир методов сортировки MongoDB.
  3. Свежие вопросы по тэгу 'mongoose+sorting' – Stack Overflow — обсуждения и решения вопросов сортировки в Mongoose с теми, кто столкнулся с аналогичными задачами.
  4. Array.prototype.sort() – JavaScript | MDN — изучаем особенности сортировки массивов в JavaScript.
  5. Mongoose v8.1.2: Начало работы — вводное руководство по работе с запросами Mongoose.
  6. Введение в Mongoose для MongoDB — полезные советы и нюансы сортировки моделей Mongoose.
  7. Поиск · mongoose sort · GitHub — примеры кода из реальной практики, когда теории не хватает.