[SERVER-84487] Support block-based $group with $top/$bottom end-to-end Created: 02/Jan/24  Updated: 02/Feb/24

Status: Backlog
Project: Core Server
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Task Priority: Major - P3
Reporter: Drew Paroski Assignee: Backlog - Query Execution
Resolution: Unresolved Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Depends
depends on SERVER-85397 Figure out strategy for implementing ... Backlog
Duplicate
is duplicated by SERVER-84490 [BP] Support group-by $top/$bottom wi... Closed
Assigned Teams:
Query Execution
Participants:

 Description   

Given a simple timeseries collection:

./build/install/bin/mongod --setParameter featureFlagSbeFull=true --setParameter featureFlagTimeSeriesInSbe=true --setParameter logComponentVerbosity='{query: 5}'
> db.coll.drop()
> db.createCollection("coll", {timeseries: {timeField: "t"}})
> db.coll.insert({t: new Date(), a: 4, b: 7, c: 5})
> db.coll.insert({t: new Date(), a: 2, b: 9, c: 8})
> db.coll.insert({t: new Date(), a: 3, b: 1, c: 6})
..

The goal of this task is to get the following queries working in block-processing mode (and to write a jstest that verifies it works):

> db.coll.aggregate([{$project: {a: 1, b: 1}}, {$group: {_id: null, x: {$top: {output: ["$a","$b"], sortBy: {b: 1}}}}}])

> db.coll.aggregate([{$project: {a: 1, b: 1}}, {$group: {_id: null, x: {$bottom: {output: ["$a","$b"], sortBy: {b: 1}}}}}])

> db.coll.aggregate([{$project: {a: 1, b: 1}}, {$group: {_id: "$c", x: {$top: {output: ["$a","$b"], sortBy: {b: 1}}}}}])

> db.coll.aggregate([{$project: {a: 1, b: 1}}, {$group: {_id: "$c", x: {$bottom: {output: ["$a","$b"], sortBy: {b: 1}}}}}])


Generated at Thu Feb 08 06:55:09 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.