MongoDB聚合查询速度极慢

时间:2016-11-03 16:20:24

标签: mongodb aggregation-framework

我在这里有一个MongoDB查询,它在没有索引的情况下运行速度极慢,但查询字段太大而无法索引,因此我正在寻找有关如何优化此查询或为其创建有效索引的建议:

collection.aggregate([{
    $match: {
        article_id: {
            $nin: read_article_ids
        },
        author_id: {
            $in: liked_authors,
            $nin: disliked_authors
        },
        word_count: {
            $gte: 1000,
            $lte: 10000
        },
        article_sentiment: {
            $elemMatch: {
                sentiments: mood
            }
        }
    }
    }, {
        $sample: {
            size: 4
        }
}])

本案例中的集合是包含article_id,author_id,word_count和article_sentiment的文章集合。集合中有大约160万个文档,像这样的查询在没有索引的情况下花费超过10秒。这个盒子有56GB的内存,并且非常精彩。

查询的功能是按用户喜欢的作者检索一批4篇文章,并且他们没有阅读并匹配给定的情绪(article_sentiment键包含一组嵌套的键:值对)

这个查询对我正在尝试实现的内容不正确吗?有没有办法改善它?

编辑:以下是此系列的示例文档。

{
"_id": ObjectId("57f7dd597a1026d326fc02c4"),
"publication_name": "National News Inc",
"author_name": "John Hardwell",
"title": "How Shifting Policy Has Stunted Cultural Growth",
"article_id": "2f0896cd47c9423cb5a309c7277dd90d",
"author_id": "51b7f46f6c0f46f2949608c9ec2624d4",
"word_count": 1202,
"article_sentiment": [{
    "sentiments": "happy",
    "weight": 0.528596282005
}, {
    "sentiments": "serious",
    "weight": 0.569274544716
}, {
    "sentiments": "relaxed",
    "weight": 0.825395524502
}]
}

0 个答案:

没有答案