db.createCollection("fuzzer_coll", {timeseries: {"timeField" : "time", "metaField" : "tag"}}) db.fuzzer_coll.insertMany([ {_id: 0, time: new Date("2023-08-28T02:02:48.409Z"), tag: 0, val: 0}, {_id: 1, time: new Date("2023-08-28T02:02:56.819Z"), tag: 0, obj: ISODate("2019-05-28T04:59:48.151Z")}, ]) db.fuzzer_coll.aggregate([{$match: {$expr: {$gte: ["any string", "$obj"]}}}]) // returns nothing db.adminCommand({configureFailPoint: 'disablePipelineOptimization', mode: 'alwaysOn'}) db.fuzzer_coll.aggregate([{$match: {$expr: {$gte: ["Refined revolutionize", "$obj"]}}}]) // returns: { "time" : ISODate("2023-08-28T02:02:48.409Z"), "tag" : 0, "_id" : 0, "val" : 0 } // same result when running this query on a non-ts collection with the same 2 documents.
The bucket-level filter is
{"control.min.obj": {"$_internalExprLte" : "any string"}}
The problem is repro with other types, not just dates and strings, as long as the original expression in the filter isn't type-bracketing (such as comparisons inside $expr).