Лучшие практики для сортировки объектов на Experss.js + Mongodb - PullRequest
0 голосов
/ 26 декабря 2018

Я хочу спросить ваше мнение о наилучшей практике сортировки объектов в веб-приложениях 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. Новейшая сортировка (товар с недавним salefrom станет выше)
  2. Самая дешевая сортировка (продукт сменьше цена станет выше)
  3. сортировка цветовых вариаций (продукт с большим количеством цветов будет выше)

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

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

Вопрос

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

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

1 Ответ

0 голосов
/ 26 декабря 2018

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...