-
Type: Improvement
-
Resolution: Fixed
-
Priority: Major - P3
-
Affects Version/s: None
-
Component/s: None
-
Fully Compatible
-
v4.4
-
Query 2020-11-30, Query 2020-12-14, Query 2020-12-28, Query 2021-01-11, Query 2021-01-25, Query 2021-02-08
-
(copied to CRM)
When aggregation operators such as $gt/$gte/$lt/$lte are used within $expr, we will not rewrite to match expression. This is because they would not be eligible to use indexes due to type bracketing differences between match and aggregation. We should consider adding regardless, as the rewrite would make these expressions eligible for aggregation match optimization, such as repositioning a comparison expression in the pipeline.
The following is an example of where this would be useful. Ideally we would rewrite the {$expr": {"$gt" : [ "$x",
{"$const": 5}]}} and move before the $lookup stage as an optimization.
db.foo.explain().aggregate({$lookup:{as:"a",from:"b",localField:"x",foreignField:"y"}},{$unwind:"$a"},{$match:{"a.z":10,$expr:{$gt:["$x",5]}}}) "stages" : [ { "$cursor" : { "query" : { }, "queryPlanner" : { "plannerVersion" : 1, "namespace" : "tpcds10.foo", "indexFilterSet" : false, "parsedQuery" : { }, "winningPlan" : { "stage" : "EOF" }, "rejectedPlans" : [ ] } } }, { "$lookup" : { "from" : "b", "as" : "a", "localField" : "x", "foreignField" : "y" } }, { "$match" : { "$and" : [ { "a.z" : { "$eq" : 10 } }, { "$expr" : { "$gt" : [ "$x", { "$const" : 5 } ] } } ] } } ], "ok" : 1 }
- is depended on by
-
SERVER-52745 Implement any MatchExpressions produced in SERVER-39943 in SBE
- Closed
-
SERVER-49293 Test collection bulk loader for resharding resuming by largest _id inserted
- Closed
- is duplicated by
-
SERVER-34926 allow $expr with comparison bounded on both sides with same type to use a non-multikey index
- Closed
- is related to
-
SERVER-34926 allow $expr with comparison bounded on both sides with same type to use a non-multikey index
- Closed
- related to
-
SERVER-39938 aggregation $match before $lookup optimization doesn't happen when $expr: $eq is used
- Closed
-
SERVER-50121 Add 'min' and 'max' parameters to aggregate command
- Closed
- mentioned in
-
Page Loading...