我正在为文档的数组字段使用单独的索引。查询文档时,正在使用 elemMatch 运算符。但是当我尝试运行 explain 命令时,它显示未使用索引。
我得到以下解释查询结果:
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "mydb.mycollection",
"winningPlan" : {
"stage" : "COLLSCAN"
}
},
"serverInfo" : {
"host" : "xxxxxx",
"port" : xxxxx,
"version" : "3.6.0"
},
"ok" : 1.0
}
这意味着它没有使用我为此集合创建的索引。
AWS 文档是否不使用 elemMatch 运算符中的数组索引?
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();
返回错误:
不能对此查询使用提示。索引是多键索引或稀疏索引,查询未优化为此索引。