2017-04-10 71 views
2

我有一篇文章收集存儲列表標籤如下:MongoDB的排序數組大小與大量的文檔

{ 
     id: 1, 
     title: "Sample title" 
     tags: ["tag1", "tag2", "tag3", "tag4"] 
    } 

爲了滿足用戶的利益,我使用聚合「匹配」和「setIntersection文章「 來計算用戶的興趣和文章標籤之間有多少個通用標籤,然後對它們進行排序以獲得最佳匹配。

db.article.aggregate([ 
      { 
       "$match": {      
        {"tags": {"$in": ["tags", ["tag1", ..., "tag100"]}}   
       } 
      },  
      { 
       "$project": { 
        "tags_match": { 
         "$setIntersection": ["tags", ["tag1", ..., "tag100"]] 
        }, 
       } 
      }, 
      { 
       "$project": { 
        "tags_match_size": { 
         "$size": "$tags_match" 
        }, 
       } 
      }, 
      {"$sort": {"tags_match_size" : 1}} 
      { "$limit" : 40 } 
      ] 
      ); 

它工作正常,如果我有幾百個文件的文章收藏。現在我有大約1M篇文章,大概需要半個小時才能完成。

我無法爲「tags_match_size」創建索引以加快運行速度,因爲它是聚合查詢中的新字段。

我怎樣才能使查詢運行得更快? 謝謝。

回答

0

創建標籤字段上的索引。索引只適用於第一場比賽。

+0

是的,我沒有創建標籤字段索引。我的查詢不會排序「tags_match_size」,但我想獲得最佳匹配,這就是爲什麼我需要對「tags_match_size」進行排序的原因。謝謝 –