猫鼬(Mongodb)按填充字段排序

时间:2019-06-04 03:34:35

标签: node.js mongodb mongoose mongodb-query aggregation-framework

我有一个Product模型,每个产品都有一个category字段。用猫鼬填充了该类别字段,其中包含Category集合中匹配文档中的字段。我这样做是为了希望通过category.popularity来排序我的产品查询,这只是一个简单的数字。这里的目标是当您按热门程度排序时,该查询将以最高编号排在第一位。我整夜都在搜索并实现使用排序的不同方式,但我误会了它的工作方式或只是做得不好。这是我打电话给我的产品

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

这将正确填充字段,但不会对其进行排序。这是我按照产品受欢迎程度对产品进行分类的正确方法吗?我很想听听您要说的话,如果您需要更多信息,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

填充不有助于对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" }}
])