我在这里有一个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
}]
}