Мангуст (Mongodb) сортировка по заселенному полю - PullRequest
3 голосов
/ 04 июня 2019

У меня есть модель Product, и у каждого продукта есть поле category. Это поле категории заполняется mongoose полями из соответствующего документа в коллекции Category. Я делаю это в надежде отсортировать мой запрос продукта по category.popularity, который является простым числом. Цель здесь - когда вы сортируете по популярности, запрос ранжируется с наибольшим номером первым. Я искал всю ночь и внедрял разные способы использования сортировки, но я либо неправильно понимаю, как это работает, либо просто не делаю это правильно. Вот мой звонок, чтобы получить продукты

const docs = await models.products
      .find(find, null, opts)
      .populate('retailer')
      .populate({
        path : 'category',
        select : 'popularity',
        options : { sort : { popularity : -1 } }
      })

Это заполняет поле правильно, но не сортирует его. Это правильный способ сортировки моих товаров по популярности по категориям? Мне нравится слышать, что вы говорите, и если вам нужна дополнительная информация, пожалуйста, дайте мне знать. Спасибо!

1 Ответ

1 голос
/ 04 июня 2019

Заполнение не помогает отсортировать ROOT / родительскую коллекцию, а также не является лучшим вариантом для объединения двух коллекций.

Вы должны использовать некоторые альтернативы, такие как $lookup, чтобы получить отсортированные документы в отношении дочерней коллекции.

const docs = await models.products.aggregate([
  { "$match": { find }},
  { "$lookup": {
    "from": Retailer.collection.name,
    "localField": "retailer",
    "foreignField": "_id",
    "as": "retailer"
  }},
  { "$lookup": {
    "from": Category.collection.name,
    "localField": "category",
    "foreignField": "_id",
    "as": "category"
  }},
  { "$unwind": "$category" },
  { "$sort": { "category.popularity" }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...