[英]Mongoose (Mongodb) sorting by populated field
我有一個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 } }
})
這會正確填充該字段,但不會對其進行排序。 這是我按類別受歡迎程度對產品進行排序的正確方法嗎? 我很想聽聽您要說什么,如果您需要更多信息,請告訴我。 謝謝!
填充無助於對根/父集合進行排序,也不是對兩個集合執行連接的更好選擇。
您必須使用諸如$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": 1 }}
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.