首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有大量文档的MongoDB按数组大小排序

具有大量文档的MongoDB按数组大小排序
EN

Stack Overflow用户
提问于 2017-04-10 17:12:37
回答 1查看 426关注 0票数 2

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

代码语言:javascript
复制
    {
       id: 1,
       title: "Sample title"
       tags: ["tag1", "tag2", "tag3", "tag4"]
    }

为了将文章匹配到用户的兴趣,我使用聚合" match“和"setIntersection”来计算用户兴趣和文章标签之间有多少公共标签,然后对它们进行排序,以获得最佳匹配。

代码语言:javascript
复制
  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 }
            ]
            );

如果我的文章集中有几百个文档,它就可以很好地工作。现在我有大约一百万篇文章,大约需要半个小时才能完成。

我无法为"tags_match_size“创建索引以提高运行速度,因为它是聚合查询中的一个新字段。

怎样才能让查询运行得更快?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-04-10 17:18:35

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43319160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档