-
Type:
Bug
-
Resolution: Duplicate
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: Querying
-
None
-
Fully Compatible
-
ALL
-
-
Quint Iteration 3
-
None
-
None
-
None
-
None
-
None
-
None
-
None
The code only checks whether an AND-expression filter is satisfied if the query is also an AND-expression. This means that querying for an explicit value of a will not be able to use the partial index.
> db.foo.find({a:6}).explain().queryPlanner
{
"plannerVersion" : 1,
"namespace" : "test.foo",
"indexFilterSet" : false,
"parsedQuery" : {
"a" : {
"$eq" : 6
}
},
"winningPlan" : {
"stage" : "COLLSCAN",
"filter" : {
"a" : {
"$eq" : 6
}
},
"direction" : "forward"
},
"rejectedPlans" : [ ]
}
But specifying a fake AND-expression in the query will allow the partial index to be used.
> db.foo.find({$and: [{a:6}, {a:6}]}).explain().queryPlanner
{
"plannerVersion" : 1,
"namespace" : "test.foo",
"indexFilterSet" : false,
"parsedQuery" : {
"$and" : [
{
"a" : {
"$eq" : 6
}
},
{
"a" : {
"$eq" : 6
}
}
]
},
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"a" : 1
},
"indexName" : "a_1",
"isMultiKey" : false,
"indexVersion" : 1,
"direction" : "forward",
"indexBounds" : {
"a" : [
"[6.0, 6.0]"
]
}
}
},
"rejectedPlans" : [ ]
}
- is related to
-
SERVER-17858 Partial indexes should support more complex queries
-
- Closed
-