Лучшая практика сортировки объектов на Experss.js + Mongodb

Я хочу спросить, что вы думаете о лучших методах сортировки объектов в веб-приложениях 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"
});

На странице списка продуктов я хочу реализовать функции сортировки, как показано ниже:

  1. Самый новый сорт (продукт с последним распродажа будет выше)
  2. Самый дешевый сорт (товар с меньшим цена получит более высокий)
  3. Сортировка цветовых вариаций (товар с большим количеством цвета будет выше)

Думаю, есть несколько способов добиться этого. Как вы думаете, что лучше всего?

Решение A. mongoose.find (). Sort () + mongoose.aggregate ()

Сначала я попробовал это решение.

Для Новейший сорт и Самый дешевый сорт mongoose.find (). Sort () очень прост в использовании с меньшим количеством кода.

Однако Сортировка цветовых вариаций не может быть выполнен с помощью mongoose.sort () (поскольку он не может сортировать по array.length), поэтому я должен использовать другой метод: mongoose.aggregate ().

Решение Б. 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 является языком как для серверной, так и для клиентской стороны, я думаю, что это вариант для сортировки.

Вопрос

Какое решение вы считаете лучшим с точки зрения производительности, гибкости и удобства обслуживания?

Пожалуйста, поделитесь со мной своими мыслями.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
212
1

Ответы 1

Раз уж вы спросили мнение .. Просто пытаюсь поделиться своим опытом работы с такими приложениями. :)

  1. Я храню индексы в mongodb по полям, для которых я собираюсь выполнить какой-то поиск или сортировку. Например, в моей базе данных есть индексы по отметкам времени (время эпохи, числовое значение). Это помогает мне сортировать значения с помощью .sort(), и это отлично работает.
  2. Есть места, где я не использую mongo .sort(), но сортирую результаты с помощью Javascript. Здесь есть два момента - может помочь Array.prototype.sort() или другие средства.

    а. Вы переносите данные в браузер и сортируете / или выполняете другие действия. Проще говоря, используйте ресурсы на стороне клиента (браузеры). Это где

    б. Вы не можете передать данные клиенту, и вам нужно будет показать только часть их после некоторой фильтрации. Но для сортировки / других операций нужны полные данные. В этом случае вы сохраняете sort / other ops внутри кода NodeJS и передаете только результат на сторону клиента.

Пункт a поможет вам использовать ресурсы на стороне клиента. Я использую это, когда это возможно.

Спасибо, что поделились своим опытом! В этом случае на моей странице продукта отображается большая часть данных о продукте, поэтому я попробую ваш способ Пункт а. Кроме того, я не установил индексы для своей ProductSchema, хотя знаю, что очень важно добиться хорошей производительности, еще раз спасибо за ваш ответ :)

tm1o2 26.12.2018 15:21

Конечно, дайте нам знать, как это происходит :)

Ravi Kumar Gupta 26.12.2018 17:52

Извините, но я не понимаю, как данные о моих товарах передаются в HTML: я сказал моя страница продукта показывает большую часть данных продукта, но на самом деле product.salefrom не отображается в браузере. В этом случае, если я все еще хочу выполнить сортировку на стороне клиента, мне нужно скрыто перенести данные продажи в html. Я прав?

tm1o2 27.12.2018 07:31

Какие бы данные вы ни вводили в браузер (html, js и т. д.), Они не скрываются. Итак, в этом случае вам нужно выполнять действия на бэкэнде в коде nodejs.

Ravi Kumar Gupta 27.12.2018 07:54

Другие вопросы по теме