2017-04-10 55 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”进行排序的原因。谢谢 –