AWS documentdb上的Mongodb db.collection.distinct()不使用索引

时间:2019-02-16 00:32:33

标签: amazon-web-services indexing aws-documentdb-mongoapi

过渡到新的AWS documentDB服务。目前,在Mongo 3.2上。当我运行db.collection.distinct("FIELD_NAME")时,它会很快返回结果。我将数据库转储到了AWS文档数据库(与Mongo 3.6兼容),但此简单查询陷入了困境。

这是我的.explain()以及工作实例与AWS documentdb的索引:

说明工作实例上的功能:

> db.collection.explain().distinct("FIELD_NAME")
{
        "queryPlanner" : {
                "plannerVersion" : 1,
                "namespace" : "db.collection",
                "indexFilterSet" : false,
                "parsedQuery" : {
                        "$and" : [ ]
                },
                "winningPlan" : {
                        "stage" : "PROJECTION",
                        "transformBy" : {
                                "_id" : 0,
                                "FIELD_NAME" : 1
                        },
                        "inputStage" : {
                                "stage" : "DISTINCT_SCAN",
                                "keyPattern" : {
                                        "FIELD_NAME" : 1
                                },
                                "indexName" : "FIELD_INDEX_NAME",
                                "isMultiKey" : false,
                                "isUnique" : false,
                                "isSparse" : false,
                                "isPartial" : false,
                                "indexVersion" : 1,
                                "direction" : "forward",
                                "indexBounds" : {
                                        "FIELD_NAME" : [
                                                "[MinKey, MaxKey]"
                                        ]
                                }
                        }
                },
                "rejectedPlans" : [ ]
        },

解释AWS documentdb,不起作用:

rs0:PRIMARY> db.collection.explain().distinct("FIELD_NAME")
{
        "queryPlanner" : {
                "plannerVersion" : 1,
                "namespace" : "db.collection",
                "winningPlan" : {
                        "stage" : "AGGREGATE",
                        "inputStage" : {
                                "stage" : "HASH_AGGREGATE",
                                "inputStage" : {
                                        "stage" : "COLLSCAN"
                                }
                        }
                }
        },
}

这两个实例的索引:

        {
                "v" : 1,
                "key" : {
                        "FIELD_NAME" : 1
                },
                "name" : "FIELD_INDEX_NAME",
                "ns" : "db.collection"
        }

该数据库也有数百万个文档,但是该“ FIELD_NAME”只有大约20个不同的值。任何帮助,将不胜感激。

我用.hint(“ index_name”)尝试了一下,但是没有用。我尝试清除计划缓存,但得到Feature not supported: planCacheClear

1 个答案:

答案 0 :(得分:0)

在这种情况下,COLLSCAN和IXSCAN的区别不大,都需要扫描所有文档或索引条目。