Я хочу спросить ваше мнение о наилучшей практике сортировки объектов в веб-приложениях expressjs + mongodb (mongoose).
Допустим, моя модель продукта имеет четыре атрибута:
var ProductSchema = new mongoose.Schema({
name: String, // "Summer T-shirt"
price: Number, // 100
salefrom: Date, // ISODate("2018-12-25T10:15:25.338Z")
colors: [String] // "red", "blue", "black"
});
Вкл.на странице списка продуктов, я хочу реализовать функции сортировки, как показано ниже:
- Новейшая сортировка (товар с недавним salefrom станет выше)
- Самая дешевая сортировка (продукт сменьше цена станет выше)
- сортировка цветовых вариаций (продукт с большим количеством цветов будет выше)
Я думаю, что есть несколькоспособы достичь этого.Как вы думаете, что является лучшей практикой?
Решение A. mongoose.find (). Sort () + mongoose.aggregate ()
Сначала я попробовал это решение.
Для Новейшая сортировка и Самая дешевая сортировка , mongoose.find (). Sort () очень проста в использовании с меньшим количеством кодирования.
Однако, Цветовые вариацииСортировка не может быть выполнена с помощью mongoose.sort () (поскольку она не может быть отсортирована по array.length), поэтому я должен использовать другой метод: mongoose.aggregate ().
Solution B. Array.prototype.sort () на стороне сервера (Express.js)
Далее я попробовал это решение.
Сначала получаем массив продуктов с помощью mongoose.find (), затем сортируем продукты с помощью Array.Функция prototype.sort () с использованием compare (), например:
function compare(a,b) {
if (a.colors.length < b.colors.length)
return -1;
if (a.colors.length > b.colors.length)
return 1;
return 0;
}
Я думаю, что это решение настолько гибкое, что я могу сделать более сложную функцию сортировки, которую я не могу сделать с помощью встроенного метода mongodb (mongoose)..
Однако с этим решением мне нужно написать много кода по сравнению с решением A.
РешениеC. Array.prototype.sort () на стороне клиента (браузера)
Честно говоря, я не пробовал это решение, но, поскольку javascript является языком как для стороны сервера, так и для стороны клиента, я думаю, что это вариант длясортировка.
Вопрос
С точки зрения производительности, гибкости и удобства обслуживания, какое решение вы считаете лучшим?
Пожалуйста, поделитесь своими мыслями.