-
Type:
Task
-
Resolution: Fixed
-
Priority:
Major - P3
-
Affects Version/s: None
-
Component/s: None
-
None
-
Query Integration
-
Fully Compatible
-
QI 2023-10-16
-
None
-
None
-
None
-
None
-
None
-
None
-
None
Repro
> db.ts3.explain().aggregate([{$project: {y: 1}}, {$match: {x: {$lt: 0}}}]);
{
"explainVersion" : "1",
"stages" : [
{
"$cursor" : {
"queryPlanner" : {
"namespace" : "test.system.buckets.ts3",
"indexFilterSet" : false,
"parsedQuery" : {
},
"queryHash" : "FCBE9F38",
"planCacheKey" : "FCBE9F38",
"maxIndexedOrSolutionsReached" : false,
"maxIndexedAndSolutionsReached" : false,
"maxScansToExplodeReached" : false,
"winningPlan" : {
"stage" : "COLLSCAN",
"direction" : "forward"
},
"rejectedPlans" : [ ]
}
}
},
{
"$_internalUnpackBucket" : {
"include" : [
"_id",
"y"
],
"timeField" : "time",
"metaField" : "mm",
"bucketMaxSpanSeconds" : 3600,
"assumeNoMixedSchemaData" : true,
"eventFilter" : {
"x" : {
"$lt" : 0
}
}
}
}
],
The eventFilter has the discarded field x. If any top-level field of the 'eventFilter' is not in the bucketSpec's fieldSet, then it's a discarded field and we cannot push down the stage because the SBE filter generator cannot refer to slot(s) for the discarded field(s) which are not returned from 'block_to_row' stage. It would be better to optimize such event filter further so that it does not include any discarded field(s).