-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
Major - P3
-
None
-
Affects Version/s: 8.0.13
-
Component/s: None
-
None
-
ALL
-
None
-
None
-
None
-
None
-
None
-
None
-
None
I have a collection with elements of the following structure:
{ device: "M57906", date: some date }
and one index { device: 1, date: 1 }
The query with $bottom does not return the correct result.
This only happens when the index exists.
h4s> db.events.aggregate([\{ $sort: { device: 1, date: 1 } }, \{ $group: { _id: "$device", obj: { $bottom: { output: "$date", sortBy: { date: -1 } } } } }]) [ \{ _id: 'M57906', obj: ISODate('2025-08-28T09:46:33.017Z') } ] h4s> db.events.aggregate([\{ $sort: { device: 1, date: 1 } }, \{ $group: { _id: "$device", obj: { $bottomN: { n: 1, output: "$date", sortBy: { date: -1 } } } } }]) [ \{ _id: 'M57906', obj: [ ISODate('2025-07-06T00:00:01.305Z') ] } ]
winning plan for $bottom query:
isCached: false, stage: 'PROJECTION_COVERED', transformBy: \{ date: 1, device: 1, _id: 0 }, inputStage: { stage: 'DISTINCT_SCAN', keyPattern: \{ device: 1, date: 1 }, indexName: 'device_1_date_1', isMultiKey: false, multiKeyPaths: \{ device: [], date: [] }, isUnique: false, isSparse: false, isPartial: false, indexVersion: 2, direction: 'backward', indexBounds: { device: [ '[MaxKey, MinKey]' ], date: [ '[MaxKey, MinKey]' ] } }
winning plan for $bottomN: n: 1 query
{ isCached: false, queryPlan: { stage: 'GROUP', planNodeId: 3, inputStage: { stage: 'PROJECTION_COVERED', planNodeId: 2, transformBy: \{ date: true, device: true, _id: false }, inputStage: { stage: 'IXSCAN', planNodeId: 1, keyPattern: \{ device: 1, date: 1 }, indexName: 'device_1_date_1', isMultiKey: false, multiKeyPaths: \{ device: [], date: [] }, isUnique: false, isSparse: false, isPartial: false, indexVersion: 2, direction: 'forward', indexBounds: { device: [ '[MinKey, MaxKey]' ], date: [ '[MinKey, MaxKey]' ] } } } }, slotBasedPlan: { slots: '$$RESULT=s9 env: \{ s4 = SortSpec({"date" : -1}) }', stages: '[3] project [s9 = newBsonObj("_id", s6, "obj", s8)] \n' + '[3] project [s8 = aggBottomNFinalize(s7, s4)] \n' + '[3] group [s6] [s7 = aggBottomN(s4, null, getSortKeyDesc(s2), (s2 ?: null)) init\{[[], 0ll, 1ll, 0, 104857600, true]}] spillSlots[s5] mergingExprs[aggBottomNMerge(s5, s4)] \n' + '[3] project [s6 = (s1 ?: null)] \n' + '[1] ixseek KS(0A0A0104) KS(F0F0FE04) none s3 none none lowPriority [s1 = 0, s2 = 1] @"edc48567-cea3-4782-97fe-7173105114f2" @"device_1_date_1" true ' } }
$top is also broken in the same way.