2014-03-19 46 views
0

我有以下的貓鼬模式:得到普及標籤與貓鼬

mongoose.Schema({ 
    text: String, 
    tags: [String] 
}); 
現在

,假設我要得到所有「熱門標籤」,我會做到以下幾點:

  1. 創建一個臨時陣列
  2. 找到最後n個元素
  3. 環通過他們和所有的標籤添加到陣列
  4. 刪除重複
  5. return array

它似乎並不是最有效的方法;有沒有更好的方法來達到同樣的結果,同時考慮到可以成爲一個真正的大集合索引問題。

+0

這直接在文檔中涵蓋:http://docs.mongodb.org/manual/tutorial/aggregation-with-user-preference-data/ – WiredPrairie

回答

0

您的問題可能會更清楚,但您想要做的是在您的收藏中的所有文檔中累積所有「標籤」的計數。

因此,而不是循環導致的代碼,你可以使用aggregate

db.collection.aggregate([ 
    // Unwind the array 
    { "$unwind": "$tags" }, 

    // Group on tags with a count 
    { "$group": { 
     "_id": "$tags", 
     "count": { "$sum": 1 } 
    }}, 

    // Optionally sort the tags by count descending 
    { "$sort": { "_id": -1 } }, 

    // Optionally limit to the top "n" results. Using 10 results here 
    { "$limit": 10 } 
]) 

然後將由他們多少次,出現次數返回前10名的青睞標籤。

對於Mongoose,aggregate有模型函數,所以你可以看看那裏的類似語法。