MongoDB按数组大小排序,包含大量文档

时间:2017-04-10 09:12:37

标签: mongodb mongodb-query

我有一个文章集合,用于存储列表标签,如下所示:

    {
       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"创建索引。运行得更快,因为它是聚合查询中的新字段。

如何让查询运行得更快? 谢谢。

1 个答案:

答案 0 :(得分:0)

为标记字段创建索引。索引仅适用于第一场$ match。