我有一个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 } }
})
这将正确填充字段,但不会对其进行排序。这是我按照产品受欢迎程度对产品进行分类的正确方法吗?我很想听听您要说的话,如果您需要更多信息,请告诉我。谢谢!
答案 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" }}
])