MongoDB具有索引和排序功能

MongoDB具有索引和排序功能,mongodb,indexing,Mongodb,Indexing,我有复合索引: { "hidden" : 1, "country" : 1, "edited" : 1, "changeset.when" : -1 } 和查询: { "country" : "ua", "edited" : true, "hidden" : false, "changeset.when" : { "$lt" : ISODate("5138-11-16T09:46:40Z") } } 它工作得又好又快。现在我想按

我有复合索引:

{
    "hidden" : 1,
    "country" : 1,
    "edited" : 1,
    "changeset.when" : -1
}
和查询:

{
    "country" : "ua",
    "edited" : true,
    "hidden" : false,
    "changeset.when" : { "$lt" : ISODate("5138-11-16T09:46:40Z") }
}
它工作得又好又快。现在我想按以下方式对结果进行排序:
{“changeset.when”:-1}
,速度会慢很多。从100毫秒到15秒

下面是关于排序查询的说明:

"winningPlan" : {
    "stage" : "SORT",
    "sortPattern" : {
        "changeset.when" : -1
    },
    "limitAmount" : 15,
    "inputStage" : {
        "stage" : "SORT_KEY_GENERATOR",
        "inputStage" : {
            "stage" : "FETCH",
            "inputStage" : {
                "stage" : "IXSCAN",
                "keyPattern" : {
                    "hidden" : 1,
                    "country" : 1,
                    "edited" : 1,
                    "changeset.when" : -1
                },
                "indexName" : "edited_news",
                "isMultiKey" : true,
                "multiKeyPaths" : {
                    "hidden" : [ ],
                    "country" : [ ],
                    "edited" : [ ],
                    "changeset.when" : [
                        "changeset"
                    ]
                },
                "isUnique" : false,
                "isSparse" : false,
                "isPartial" : false,
                "indexVersion" : 2,
                "direction" : "forward",
                "indexBounds" : {
                    "hidden" : [
                        "[false, false]"
                    ],
                    "country" : [
                        "[\"ua\", \"ua\"]"
                    ],
                    "edited" : [
                        "[true, true]"
                    ],
                    "changeset.when" : [
                        "(new Date(100000000000000), true)"
                    ]
                }
            }
        }
    }
}

为什么这么慢?Explain显示它成功地使用了所需的索引和字段
变更集

如果您有复合索引,请尝试创建与索引Sequencence类似的查询键序列。它将带来更多的性能

您不需要对结果进行传统排序,默认情况下,结果将根据索引进行排序(在您的情况下,结果将按
变更集降序排序。当

有关更多信息,请共享您收藏的一些文档


如果您有任何问题,请随时询问

尝试将
变更集作为索引中的第一个条目或在该字段上创建单键索引。。看见