-
Type:
Improvement
-
Resolution: Unresolved
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
Query Optimization
-
Query 2019-12-16, Query 2019-12-30, Query 2020-01-13
-
21
-
None
-
3
-
None
-
None
-
None
-
None
-
None
-
None
-
None
As part of SERVER-36723, a second call to optimizePipeline() was removed as the original intent for doing this was only to absorb a $limit which is no longer necessary. However this introduced a more subtle behavior change, since our pipeline optimization code first attempts to re-order/split stages and then optimizes each individual stage. In the case where a $match has a $or with one child, the second phase will remove the $or altogether. There's a chance that the new $match without the $or can be split and moved ahead of a prior stage, which coincidentally will happen on the second call to optimizePipeline().