2

我正在为文档的数组字段使用单独的索引。在查询文档时,正在使用 elemMatch 运算符。但是当我尝试运行解释命令时,它告诉我没有使用索引。

我得到以下解释查询的结果:

    "queryPlanner" : {
        "plannerVersion" : 1,
        "namespace" : "mydb.mycollection",
        "winningPlan" : {
            "stage" : "COLLSCAN"
        }
    },
    "serverInfo" : {
        "host" : "xxxxxx",
        "port" : xxxxx,
        "version" : "3.6.0"
    },
    "ok" : 1.0
}

这意味着它没有使用我为此集合创建的索引。

aws 文档是否在 elemMatch 运算符中不使用数组索引。?

4

1 回答 1

2

AWS DocumentDB目前不支持在使​​用$elemMatch运算符时使用索引。

$distinct、$elemMatch 和 $lookup 索引

Amazon DocumentDB 目前不支持将索引与 $distinct、$elemMatch 和 $lookup 运算符一起使用。因此,使用这些运算符将导致收集扫描。在使用这些运算符之一之前执行过滤或匹配将减少需要扫描的数据量,从而可以提高性能。

https://docs.aws.amazon.com/documentdb/latest/developerguide/functional-differences.html#functional-differences.elemMatch

示例查询:

db.getCollection("collection").find(
    { 
        "MyArrayField" : { 
            "$elemMatch" : { 
                "MyFieldOfObjectInArray" : UUID("11111111-1111-1111-111-111111111111")
            }
        }
    }
).hint("Multi_key_index").explain();

返回错误:

不能对此查询使用提示。索引是多键索引或稀疏索引,查询未优化为使用此索引。

于 2020-08-18T06:54:54.667 回答