-
Type:
New Feature
-
Resolution: Fixed
-
Priority:
Major - P3
-
Affects Version/s: None
-
Component/s: None
-
None
-
Fully Compatible
-
178
-
None
-
0
-
None
-
None
-
None
-
None
-
None
-
None
Implement the appropriate query rewrite the 2 remaining cases with {+-meta, +ts}. Assuming that we extend the indexes to both (min,max) and (max,min) the rewrites become:
For reference, here's the case we already did in Milestone :2
index({meta.sensorId: 1, meta.sensorId: -1}) db.telemetry.aggregate([ {$sort: {"metadata.sensorId": 1, "timestamp": -1}}, {$group: { _id: "$metadata.sensorId", ts: {$first: "$timestamp"}, temp: {$first: "$temp"} }} ])
translates to:
db.system.buckets.telemetry.explain("executionStats").aggregate([ {$sort: {"meta.sensorId": 1, "control.max.timestamp": -1}}, {$group: { _id: "$meta.sensorId", bucket: {$first: "$_id"}, }}, {$lookup: { from: "system.buckets.telemetry", foreignField: "_id", localField: "bucket", as: "bucket_data", pipeline:[ {$_internalUnpackBucket: { timeField:"timestamp", metaField:"tags", bucketMaxSpanSeconds:NumberInt("60") }}, {$sort: {"timestamp": -1}}, {$limit:1} ] }}, {$unwind: "$bucket_data"}, {$replaceWith:{ _id: "$_id", timestamp: "$bucket_data.timestamp", temp: "$bucket_data.temp" }} ]);
This is adapted as follows:
milestone | user index | $sort | $group accumulator |
---|---|---|---|
2 (done) | {meta:1, ts:-1} | {meta:1, control.max.timestamp:-1} | $first |
3 | {meta:-1, ts:-1} | {meta:-1, control.max.timestamp:-1} | $first |
3 | {meta:1, ts:1} | {meta:1, control.max.timestamp:1} | $last |
3 | {meta:-1, ts:1} | {meta:-1, control.max.timestamp:1} | $last |
This tickets covers the last two rows above.
- related to
-
SERVER-61657 Last point TS Opt M3: Query rewrite for {meta: -1, ts: -1} case
-
- Closed
-