我有一个拥有超过2000万条记录的集合:
{
"_id" : ObjectId("58f8af0f65fc0a38e40a478f"),
"text" : "Example text",
"postdate" : NumberLong("1492692751921"),
"cId" : "58e3cdbe29c8a54394c52c74",
}
这样的索引:{postdate : -1}
当然还有更多的领域,但这是最重要的。现在我想查询它:
db.coll.aggregate([
{ "$match" : {
"$and" : [
{ "postdate" : { "$gt" : 0}} ,
{ "postdate" : { "$lt" : 1497469601983}} ,
{ "cId" : "58e3cdbe29c8a54394c52c74"}
]
}},
{ "$sort" : { "postdate" : -1}},
{ "$limit" : 20}]);
但这需要很长时间。我想知道我是否可以提高这种性能。我需要这个查询才能更快地运行。我该怎么办?
谢谢
答案 0 :(得分:2)
尝试创建索引:
{ "cId" : 1, "postdate" : 1 }
此索引将索引$ match阶段中包含的两个字段,同时也为排序结果建立索引。有关索引索引的更多信息可以在here找到。
您可能还想通过运行一些解释计划来检查性能。 The response to this question包含有关如何对聚合执行说明的指南。