簡體   English   中英

Mongoose (Mongodb) 按填充字段排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM