Сортировка результатов запроса в Mongoose: метод sort()
Быстрый ответ
Сортировка в Mongoose выполняется с помощью метода .sort({ поле: 1 })
для обеспечения сортировки по возрастанию и .sort({ поле: -1 })
для сортировки по убыванию.
// Сортировка по возрастанию: словно поднимаемся по летнице вверх
YourModel.find().sort({ поле: 1 }).exec();
// Сортировка по убыванию: словно спускаемся с вершины горы вниз
YourModel.find().sort({ поле: -1 }).exec();
Помните о значимости цепочки методов: .sort()
необходимо вызывать сразу после .find()
. Если хотите сортировать по нескольким критериям, добавьте их в объект: .sort({ поле1: 1, поле2: -1 })
.
Упорядочивание данных
Сортировка по нескольким критериям
Для упорядочивания по нескольким параметрам достаточно просто определить их приоритеты в объекте сортировки.
// Сначала по наиболее значимым параметрам, затем по менее важным
YourModel.find().sort({ основноеПоле: 1, второстепенноеПоле: -1 }).exec();
Сортировка строк с учетом регистра
Чтобы осуществить сортировку строк, не учитывая регистр, нужно задать коллацию для вашего языкового стандарта:
YourModel.find().collation({ locale: 'ru' }).sort({ строковоеПоле: 1 }).exec();
Сортировка с пагинацией
Для реализации пагинации метод .sort()
можно сочетать с .limit()
и .skip()
:
let размерСтраницы = 10;
let номерСтраницы = 2;
// Пролистываем страницы поочерёдно
YourModel.find()
.sort({ поле: 1 })
.skip(размерСтраницы * (номерСтраницы – 1))
.limit(размерСтраницы)
.exec();
Визуализация
Представим полки в библиотеке (📚), где книги — это документы mongoose, упорядоченные по году издания:
До сортировки (📚): [2018, 2021, 2019, 2017]
Библиотекарь (mongoose) расставляет их в порядке с помощью find().sort({ year: 1 })
:
Collection.find().sort({ year: 1 }); // Сортировка по возрастанию
После сортировки (📚): [2017, 2018, 2019, 2021]
Теперь книги на полке расположены в хронологическом порядке — от старых изданий к новым.
Методы и типовые ошибки при сортировке
Правильное использование .exec()
Всегда используйте .exec()
для инициализации запросов и получения промисов. Это упрощает код и ускоряет дальнейшую работу с then
.
YourModel.find().sort({ поле: 1 }).exec().then(docs => { /* осуществляем действия с полученными результатами */ });
Сортировка вложенных полей
Для упорядочивания вложенных полей рекомендуется применить точечную нотацию:
YourModel.find().sort({ 'вложенное.поле': 1 }).exec();
Обработка ошибок
Обрабатывайте все возникающие ошибки, чтобы быстро находить проблемы, связанные с некорректным выбором полей или неправильной методикой сортировки:
YourModel.find().sort({ поле: 1 }).exec((err, docs) => {
if (err) {
// Необходимо разобраться с ошибкой!
} else {
// Всё идёт нормально, продолжаем работу...
}
});
Оптимизация производительности сортировки
Для улучшения производительности при работе с большим объемом данных рекомендуется проводить сортировку по индексированным полям. Mongoose эффективно использует один и тот же индекс для фильтрации и сортировки данных.
Сортировка в конвейерах агрегаций
В агрегационных конвейерах используйте оператор $sort
для упорядочивания данных:
YourModel.aggregate([{ $sort : { поле : 1 } }]);
Полезные материалы
- Mongoose v8.1.2: Документация API — для тех, кто доверяет только официальным источникам.
- cursor.sort() — Полное руководство по MongoDB — глубокое погружение в мир методов сортировки MongoDB.
- Свежие вопросы по тэгу 'mongoose+sorting' – Stack Overflow — обсуждения и решения вопросов сортировки в Mongoose с теми, кто столкнулся с аналогичными задачами.
- Array.prototype.sort() – JavaScript | MDN — изучаем особенности сортировки массивов в JavaScript.
- Mongoose v8.1.2: Начало работы — вводное руководство по работе с запросами Mongoose.
- Введение в Mongoose для MongoDB — полезные советы и нюансы сортировки моделей Mongoose.
- Поиск · mongoose sort · GitHub — примеры кода из реальной практики, когда теории не хватает.