mirror of https://github.com/mongodb/mongo
1909 lines
72 KiB
JavaScript
1909 lines
72 KiB
JavaScript
/*
|
|
* Test cases and common TS queries that use block processing.
|
|
*/
|
|
export function generateMetaVals() {
|
|
const metaVals = ["foo", {region: "us", series: 123}, {region: "eu", series: 456}];
|
|
return metaVals;
|
|
}
|
|
|
|
export function blockProcessingTestCases(
|
|
timeFieldName,
|
|
metaFieldName,
|
|
datePrefix,
|
|
dateUpperBound,
|
|
dateLowerBound,
|
|
featureFlagsAllowBlockHashAgg,
|
|
sbeFullEnabled,
|
|
) {
|
|
const dateMidPoint = new Date((dateLowerBound.getTime() + dateUpperBound.getTime()) / 2);
|
|
const dollarPrefixedTime = "$" + timeFieldName;
|
|
const dollarPrefixedMeta = "$" + metaFieldName;
|
|
|
|
const metaDotRegion = dollarPrefixedMeta + ".region";
|
|
const metaDotNonExistent = dollarPrefixedMeta + ".NON_EXISTENT";
|
|
const metaDotSeries = dollarPrefixedMeta + ".series";
|
|
|
|
return [
|
|
{
|
|
name: "GroupByNull",
|
|
pipeline: [{$match: {[timeFieldName]: {$lt: dateUpperBound}}}, {$group: {_id: null}}, {$project: {_id: 1}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "Count",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$count: "count"},
|
|
{$project: {_id: 1, count: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "Count_FilterHalf",
|
|
pipeline: [
|
|
{
|
|
$match: {
|
|
[timeFieldName]: {
|
|
$lt: new Date((dateLowerBound.getTime() + dateUpperBound.getTime()) / 2),
|
|
},
|
|
},
|
|
},
|
|
{$count: "count"},
|
|
{$project: {_id: 1, count: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_MinWithoutId",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: null, a: {$min: "$y"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_MinWithoutIdAllPass",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$gt: dateLowerBound}}},
|
|
{$group: {_id: null, a: {$min: "$y"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_Min",
|
|
pipeline: [{$match: {[timeFieldName]: {$lt: dateUpperBound}}}, {$group: {_id: null, a: {$min: "$y"}}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_MaxWithoutId",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: null, a: {$max: "$y"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_MaxWithoutIdAllPass",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$gt: dateLowerBound}}},
|
|
{$group: {_id: null, a: {$max: "$y"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_Max",
|
|
pipeline: [{$match: {[timeFieldName]: {$lt: dateUpperBound}}}, {$group: {_id: null, a: {$max: "$y"}}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_MinAndMaxWithoutId",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: null, a: {$min: "$y"}, b: {$max: "$y"}}},
|
|
{$project: {_id: 0, a: 1, b: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_MinAndMaxWithoutIdAllPass",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$gt: dateLowerBound}}},
|
|
{$group: {_id: null, a: {$min: "$y"}, b: {$max: "$y"}}},
|
|
{$project: {_id: 0, a: 1, b: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_MinAndMax",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: null, a: {$min: "$y"}, b: {$max: "$y"}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_MinWithoutId",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: "$x", a: {$min: "$y"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_Min",
|
|
pipeline: [{$match: {[timeFieldName]: {$lt: dateUpperBound}}}, {$group: {_id: "$x", a: {$min: "$y"}}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_MaxWithoutId",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: "$x", a: {$max: "$y"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_Max",
|
|
pipeline: [{$match: {[timeFieldName]: {$lt: dateUpperBound}}}, {$group: {_id: "$x", a: {$max: "$y"}}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_MinAndMaxWithoutId",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: "$x", a: {$min: "$y"}, b: {$max: "$y"}}},
|
|
{$project: {_id: 0, a: 1, b: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_MinAndMax",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: "$x", a: {$min: "$y"}, b: {$max: "$y"}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByDateTrunc_MinAndMax",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {$dateTrunc: {date: dollarPrefixedTime, unit: "hour"}},
|
|
a: {$min: "$y"},
|
|
b: {$max: "$y"},
|
|
},
|
|
},
|
|
{$project: {_id: 1, a: 1, b: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByDateAdd_Min",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {
|
|
$dateAdd: {startDate: dollarPrefixedTime, unit: "millisecond", amount: 100},
|
|
},
|
|
a: {$min: "$y"},
|
|
},
|
|
},
|
|
{$project: {_id: 1, a: "$a"}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByDateAddAndDateDiff_Min",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {
|
|
$dateAdd: {
|
|
startDate: ISODate("2024-01-01T00:00:00"),
|
|
unit: "millisecond",
|
|
amount: {
|
|
$dateDiff: {
|
|
startDate: new Date(datePrefix),
|
|
endDate: dollarPrefixedTime,
|
|
unit: "millisecond",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
a: {$min: "$y"},
|
|
},
|
|
},
|
|
{$project: {_id: 1, a: "$a"}},
|
|
],
|
|
usesBlockProcessing: false,
|
|
},
|
|
{
|
|
name: "GroupByDateSubtract_Min",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {
|
|
$dateSubtract: {startDate: dollarPrefixedTime, unit: "millisecond", amount: 100},
|
|
},
|
|
a: {$min: "$y"},
|
|
},
|
|
},
|
|
{$project: {_id: 1, a: "$a"}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByDateSubtractAndDateDiff_Min",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {
|
|
$dateSubtract: {
|
|
startDate: ISODate("2024-01-01T00:00:00"),
|
|
unit: "millisecond",
|
|
amount: {
|
|
$dateDiff: {
|
|
startDate: new Date(datePrefix),
|
|
endDate: dollarPrefixedTime,
|
|
unit: "millisecond",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
a: {$min: "$y"},
|
|
},
|
|
},
|
|
{$project: {_id: 1, a: "$a"}},
|
|
],
|
|
usesBlockProcessing: false,
|
|
},
|
|
{
|
|
name: "GroupByNull_MaxAndMinOfDateDiff",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lte: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {
|
|
$min: {
|
|
$dateDiff: {
|
|
startDate: new Date(datePrefix),
|
|
endDate: dollarPrefixedTime,
|
|
unit: "millisecond",
|
|
},
|
|
},
|
|
},
|
|
b: {
|
|
$max: {
|
|
$dateDiff: {
|
|
startDate: new Date(datePrefix),
|
|
endDate: dollarPrefixedTime,
|
|
unit: "millisecond",
|
|
},
|
|
},
|
|
},
|
|
c: {
|
|
$min: {
|
|
$dateDiff: {
|
|
startDate: dollarPrefixedTime,
|
|
endDate: new Date(datePrefix),
|
|
unit: "millisecond",
|
|
},
|
|
},
|
|
},
|
|
d: {
|
|
$max: {
|
|
$dateDiff: {
|
|
startDate: dollarPrefixedTime,
|
|
endDate: new Date(datePrefix),
|
|
unit: "millisecond",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{$project: {_id: 0, a: 1, b: 1, c: 1, d: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_MaxAndMinOfDateAddDateSubtractDateTrunc",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lte: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {
|
|
$min: {
|
|
$dateAdd: {
|
|
startDate: dollarPrefixedTime,
|
|
unit: "millisecond",
|
|
amount: 100,
|
|
},
|
|
},
|
|
},
|
|
b: {
|
|
$max: {
|
|
$dateSubtract: {
|
|
startDate: dollarPrefixedTime,
|
|
unit: "millisecond",
|
|
amount: 100,
|
|
},
|
|
},
|
|
},
|
|
c: {$max: {$dateTrunc: {date: dollarPrefixedTime, unit: "second"}}},
|
|
},
|
|
},
|
|
{$project: {_id: 0, a: 1, b: 1, c: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByDateTruncAndDateAdd_MinAndMax",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {
|
|
$dateTrunc: {
|
|
date: {
|
|
$dateAdd: {
|
|
startDate: dollarPrefixedTime,
|
|
unit: "millisecond",
|
|
amount: 100,
|
|
},
|
|
},
|
|
unit: "hour",
|
|
},
|
|
},
|
|
a: {$min: "$y"},
|
|
b: {$max: "$y"},
|
|
},
|
|
},
|
|
{$project: {_id: 1, a: 1, b: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByDateTruncAndDateSubtract_MinAndMax",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {
|
|
$dateTrunc: {
|
|
date: {
|
|
$dateSubtract: {
|
|
startDate: dollarPrefixedTime,
|
|
unit: "millisecond",
|
|
amount: 100,
|
|
},
|
|
},
|
|
unit: "hour",
|
|
},
|
|
},
|
|
a: {$min: "$y"},
|
|
b: {$max: "$y"},
|
|
},
|
|
},
|
|
{$project: {_id: 1, a: 1, b: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByDateDiffAndDateAdd_Min",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {
|
|
$dateDiff: {
|
|
startDate: new Date(datePrefix),
|
|
endDate: {
|
|
$dateAdd: {
|
|
startDate: dollarPrefixedTime,
|
|
unit: "millisecond",
|
|
amount: 100,
|
|
},
|
|
},
|
|
unit: "millisecond",
|
|
},
|
|
},
|
|
a: {$min: "$y"},
|
|
},
|
|
},
|
|
{$project: {_id: 1, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_MinOfDateDiff_InvalidDate",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lte: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {
|
|
$min: {
|
|
$dateDiff: {
|
|
startDate: new Date(datePrefix),
|
|
endDate: "$y",
|
|
unit: "millisecond",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
expectedErrorCode: 7157922,
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_MinOfDateAdd_MissingAmount",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lte: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {
|
|
$min: {
|
|
$dateAdd: {
|
|
startDate: new Date(datePrefix),
|
|
unit: "millisecond",
|
|
amount: "$k",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: false,
|
|
},
|
|
{
|
|
name: "GroupByDateDiff_MinPlusMax",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lte: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {
|
|
$dateDiff: {
|
|
startDate: new Date(datePrefix),
|
|
endDate: dollarPrefixedTime,
|
|
unit: "millisecond",
|
|
},
|
|
},
|
|
a: {$min: "$y"},
|
|
b: {$max: "$y"},
|
|
},
|
|
},
|
|
{
|
|
$project: {
|
|
_id: 1,
|
|
a: {
|
|
$cond: [{$and: [{$isNumber: "$a"}, {$isNumber: "$b"}]}, {$add: ["$a", "$b"]}, null],
|
|
},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByFilteredComputedDateDiff_MinPlusMax",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lte: new Date(datePrefix + 300)}}},
|
|
{
|
|
$addFields: {
|
|
msDiff: {
|
|
$dateDiff: {
|
|
startDate: new Date(datePrefix),
|
|
endDate: dollarPrefixedTime,
|
|
unit: "millisecond",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{$match: {msDiff: {$gte: 300}}},
|
|
{$group: {_id: "$msDiff", a: {$min: "$y"}, b: {$max: "$y"}}},
|
|
{
|
|
$project: {
|
|
_id: 1,
|
|
a: {
|
|
$cond: [{$and: [{$isNumber: "$a"}, {$isNumber: "$b"}]}, {$add: ["$a", "$b"]}, null],
|
|
},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_MinWithoutId_NoFilter",
|
|
pipeline: [{$group: {_id: "$x", a: {$min: "$y"}}}, {$project: {_id: 0, a: 1}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_Min_NoFilter",
|
|
pipeline: [{$group: {_id: "$x", a: {$min: "$y"}}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_MaxWithoutId_NoFilter",
|
|
pipeline: [{$group: {_id: "$x", a: {$max: "$y"}}}, {$project: {_id: 0, a: 1}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_Max_NoFilter",
|
|
pipeline: [{$group: {_id: "$x", a: {$max: "$y"}}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_MinAndMaxWithoutId_NoFilter",
|
|
pipeline: [{$group: {_id: "$x", a: {$min: "$y"}, b: {$max: "$y"}}}, {$project: {_id: 0, a: 1, b: 1}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_MinAndMax_NoFilter",
|
|
pipeline: [{$group: {_id: "$x", a: {$min: "$y"}, b: {$max: "$y"}}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByDateTrunc_MinAndMax_NoFilter",
|
|
pipeline: [
|
|
{
|
|
$group: {
|
|
_id: {"$dateTrunc": {date: dollarPrefixedTime, unit: "minute", binSize: 1}},
|
|
a: {$min: "$y"},
|
|
b: {$max: "$y"},
|
|
},
|
|
},
|
|
{$project: {_id: 1, a: 1, b: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByDateTruncAndDateDiff_MinAndMax_NoFilter",
|
|
pipeline: [
|
|
{
|
|
$group: {
|
|
_id: {
|
|
date: {
|
|
$dateTrunc: {date: dollarPrefixedTime, unit: "millisecond", binSize: 200},
|
|
},
|
|
delta: {
|
|
$dateDiff: {
|
|
startDate: new Date(datePrefix),
|
|
endDate: dollarPrefixedTime,
|
|
unit: "millisecond",
|
|
},
|
|
},
|
|
},
|
|
a: {$min: "$y"},
|
|
b: {$max: "$y"},
|
|
},
|
|
},
|
|
{$project: {_id: 1, a: 1, b: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByDateTruncAndMeta_MinAndMax_NoFilter",
|
|
pipeline: [
|
|
{
|
|
$group: {
|
|
_id: {
|
|
date: {
|
|
$dateTrunc: {date: dollarPrefixedTime, unit: "minute", binSize: 1},
|
|
},
|
|
symbol: dollarPrefixedMeta,
|
|
},
|
|
a: {$min: "$y"},
|
|
b: {$max: "$y"},
|
|
},
|
|
},
|
|
{$project: {_id: 1, a: 1, b: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByMeta_MinAndMax_NoFilter",
|
|
pipeline: [
|
|
{$group: {_id: dollarPrefixedMeta, a: {$min: "$y"}, b: {$max: "$y"}}},
|
|
{$project: {_id: 1, a: 1, b: 1}},
|
|
],
|
|
usesBlockProcessing: false,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_MinWithoutId",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: {x: "$x", y: "$y"}, a: {$min: "$z"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_Min",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: {x: "$x", y: "$y"}, a: {$min: "$z"}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_MaxWithoutId",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: {x: "$x", y: "$y"}, a: {$max: "$z"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_Max",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: {x: "$x", y: "$y"}, a: {$max: "$z"}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_MultipleMinsAndMaxs",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$min: "$z"},
|
|
b: {$max: "$z"},
|
|
c: {$min: "$p"},
|
|
d: {$max: "$q"},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByMetaIndexKey_MinWithoutId",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: {$meta: "indexKey"}, a: {$min: "$y"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: false,
|
|
},
|
|
{
|
|
name: "GroupByX_MinOfMetaIndexKeyWithoutId",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: "$x", a: {$min: {$meta: "indexKey"}}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: false,
|
|
},
|
|
|
|
//
|
|
// $sum tests //////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
{
|
|
name: "GroupByNull_Sum",
|
|
pipeline: [{$match: {[timeFieldName]: {$lt: dateUpperBound}}}, {$group: {_id: null, a: {$sum: "$y"}}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "DateUpper_GroupByNull_Sum_Project",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: null, a: {$sum: "$y"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "DateLower_GroupByNull_Sum_Project",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$gt: dateLowerBound}}},
|
|
{$group: {_id: null, a: {$sum: "$y"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_Sum",
|
|
pipeline: [{$match: {[timeFieldName]: {$lt: dateUpperBound}}}, {$group: {_id: "$x", a: {$sum: "$y"}}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_Sum_Project",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: "$x", a: {$sum: "$y"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_MultipleSums",
|
|
pipeline: [{$group: {_id: "$x", a: {$sum: "$x"}, b: {$sum: "$y"}, c: {$sum: "$z"}}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_Sum_Project",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: {x: "$x", y: "$y"}, a: {$sum: "$z"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByMetaSortKey_Sum_Project",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: {$meta: "sortKey"}, a: {$sum: "$y"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: false,
|
|
},
|
|
{
|
|
name: "GroupByX_SumOfMetaSortKey_Project",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: "$x", a: {$sum: {$meta: "sortKey"}}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: false,
|
|
},
|
|
|
|
//
|
|
// $avg tests //////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
{
|
|
name: "GroupByNull_Avg",
|
|
pipeline: [{$match: {[timeFieldName]: {$lt: dateUpperBound}}}, {$group: {_id: null, a: {$avg: "$y"}}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "DateUpper_GroupByNull_Avg_Project",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: null, a: {$avg: "$y"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "DateLower_GroupByNull_Avg_Project",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$gt: dateLowerBound}}},
|
|
{$group: {_id: null, a: {$avg: "$y"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_Avg",
|
|
pipeline: [{$match: {[timeFieldName]: {$lt: dateUpperBound}}}, {$group: {_id: "$x", a: {$avg: "$y"}}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_Avg_Project",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: "$x", a: {$avg: "$y"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_MultipleAvgs",
|
|
pipeline: [{$group: {_id: "$x", a: {$avg: "$x"}, b: {$avg: "$y"}, c: {$avg: "$z"}}}],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_Avg_Project",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: {x: "$x", y: "$y"}, a: {$avg: "$z"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByMetaSortKey_Avg_Project",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: {$meta: "sortKey"}, a: {$avg: "$y"}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: false,
|
|
},
|
|
{
|
|
name: "GroupByX_AvgOfMetaSortKey_Project",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: "$x", a: {$avg: {$meta: "sortKey"}}}},
|
|
{$project: {_id: 0, a: 1}},
|
|
],
|
|
usesBlockProcessing: false,
|
|
},
|
|
|
|
//
|
|
// Projected-out field tests ///////////////////////////////////////////////////////////////
|
|
//
|
|
{
|
|
name: "MatchMetaGroupWithProjectedOutFieldInAccumulator",
|
|
pipeline: [
|
|
{$project: {_id: 0}},
|
|
{$match: {[metaFieldName]: "foo"}},
|
|
{$group: {_id: null, minY: {$min: "$y"}}},
|
|
],
|
|
usesBlockProcessing: sbeFullEnabled,
|
|
},
|
|
{
|
|
name: "MatchTimeGroupWithProjectedOutFieldInAccumulator",
|
|
pipeline: [
|
|
{$project: {_id: 0}},
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{$group: {_id: null, minY: {$min: "$y"}}},
|
|
],
|
|
usesBlockProcessing: sbeFullEnabled,
|
|
},
|
|
{
|
|
name: "GroupWithProjectedOutFieldInGb",
|
|
pipeline: [
|
|
{$project: {_id: 0}},
|
|
{$match: {[metaFieldName]: "foo"}},
|
|
{$group: {_id: "$y", a: {$min: "$x"}}},
|
|
],
|
|
usesBlockProcessing: sbeFullEnabled,
|
|
},
|
|
{
|
|
name: "GroupWithMixOfProjectedOutField",
|
|
pipeline: [
|
|
{$project: {_id: 0, x: 1}}, // y not included
|
|
{$match: {[metaFieldName]: "foo"}},
|
|
{$group: {_id: "$y", a: {$min: "$x"}}},
|
|
],
|
|
usesBlockProcessing: false,
|
|
},
|
|
{
|
|
name: "ProjectedOutCompoundGroupKeys",
|
|
pipeline: [
|
|
{$project: {t: "$t"}},
|
|
{$project: {m: "$m"}},
|
|
{$group: {_id: {t: "$t", m: "$m"}, gb: {$min: "$a"}}},
|
|
],
|
|
usesBlockProcessing: sbeFullEnabled,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopAndBottomSortByZ_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$top: {sortBy: {z: 1}, output: "$w"}},
|
|
b: {$bottom: {sortBy: {z: 1}, output: "$w"}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopNAndBottomNSortByZ_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$topN: {sortBy: {z: 1}, output: "$w", n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1}, output: "$w", n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopAndBottomSortByZ_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$top: {sortBy: {z: 1}, output: ["$w"]}},
|
|
b: {$bottom: {sortBy: {z: 1}, output: ["$w"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopNAndBottomNSortByZ_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$topN: {sortBy: {z: 1}, output: ["$w"], n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1}, output: ["$w"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopAndBottomSortByZ_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$top: {sortBy: {z: 1}, output: ["$w", "$z"]}},
|
|
b: {$bottom: {sortBy: {z: 1}, output: ["$w", "$z"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopNAndBottomNSortByZ_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$topN: {sortBy: {z: 1}, output: ["$w", "$z"], n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1}, output: ["$w", "$z"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopAndBottomSortByZ_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$top: {sortBy: {z: 1}, output: "$w"}},
|
|
b: {$bottom: {sortBy: {z: 1}, output: "$w"}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopNAndBottomNSortByZ_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$topN: {sortBy: {z: 1}, output: "$w", n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1}, output: "$w", n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopAndBottomSortByZ_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$top: {sortBy: {z: 1}, output: ["$w"]}},
|
|
b: {$bottom: {sortBy: {z: 1}, output: ["$w"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopNAndBottomNSortByZ_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$topN: {sortBy: {z: 1}, output: ["$w"], n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1}, output: ["$w"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopAndBottomSortByZ_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$top: {sortBy: {z: 1}, output: ["$w", "$z"]}},
|
|
b: {$bottom: {sortBy: {z: 1}, output: ["$w", "$z"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopNAndBottomNSortByZ_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$topN: {sortBy: {z: 1}, output: ["$w", "$z"], n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1}, output: ["$w", "$z"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopAndBottomSortByZ_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$top: {sortBy: {z: 1}, output: "$w"}},
|
|
b: {$bottom: {sortBy: {z: 1}, output: "$w"}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopNAndBottomNSortByZ_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$topN: {sortBy: {z: 1}, output: "$w", n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1}, output: "$w", n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopAndBottomSortByZ_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$top: {sortBy: {z: 1}, output: ["$w"]}},
|
|
b: {$bottom: {sortBy: {z: 1}, output: ["$w"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopNAndBottomNSortByZ_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$topN: {sortBy: {z: 1}, output: ["$w"], n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1}, output: ["$w"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopAndBottomSortByZ_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$top: {sortBy: {z: 1}, output: ["$w", "$z"]}},
|
|
b: {$bottom: {sortBy: {z: 1}, output: ["$w", "$z"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopNAndBottomNSortByZ_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$topN: {sortBy: {z: 1}, output: ["$w", "$z"], n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1}, output: ["$w", "$z"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopAndBottomSortByZAndW_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$top: {sortBy: {z: 1, w: -1}, output: "$w"}},
|
|
b: {$bottom: {sortBy: {z: 1, w: -1}, output: "$w"}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopNAndBottomNSortByZAndW_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$topN: {sortBy: {z: 1, w: -1}, output: "$w", n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1, w: -1}, output: "$w", n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopAndBottomSortByZAndW_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$top: {sortBy: {z: 1, w: -1}, output: ["$w"]}},
|
|
b: {$bottom: {sortBy: {z: 1, w: -1}, output: ["$w"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopNAndBottomNSortByZAndW_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$topN: {sortBy: {z: 1, w: -1}, output: ["$w"], n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1, w: -1}, output: ["$w"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopAndBottomSortByZAndW_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$top: {sortBy: {z: 1, w: -1}, output: ["$w", "$z"]}},
|
|
b: {$bottom: {sortBy: {z: 1, w: -1}, output: ["$w", "$z"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopNAndBottomNSortByZAndW_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$topN: {sortBy: {z: 1, w: -1}, output: ["$w", "$z"], n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1, w: -1}, output: ["$w", "$z"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopAndBottomSortByZAndW_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$top: {sortBy: {z: 1, w: -1}, output: "$w"}},
|
|
b: {$bottom: {sortBy: {z: 1, w: -1}, output: "$w"}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopNAndBottomNSortByZAndW_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$topN: {sortBy: {z: 1, w: -1}, output: "$w", n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1, w: -1}, output: "$w", n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopAndBottomSortByZAndW_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$top: {sortBy: {z: 1, w: -1}, output: ["$w"]}},
|
|
b: {$bottom: {sortBy: {z: 1, w: -1}, output: ["$w"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopNAndBottomNSortByZAndW_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$topN: {sortBy: {z: 1, w: -1}, output: ["$w"], n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1, w: -1}, output: ["$w"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopAndBottomSortByZAndW_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$top: {sortBy: {z: 1, w: -1}, output: ["$w", "$z"]}},
|
|
b: {$bottom: {sortBy: {z: 1, w: -1}, output: ["$w", "$z"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopNAndBottomNSortByZAndW_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$topN: {sortBy: {z: 1, w: -1}, output: ["$w", "$z"], n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1, w: -1}, output: ["$w", "$z"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopAndBottomSortByZAndW_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$top: {sortBy: {z: 1, w: -1}, output: "$w"}},
|
|
b: {$bottom: {sortBy: {z: 1, w: -1}, output: "$w"}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopNAndBottomNSortByZAndW_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$topN: {sortBy: {z: 1, w: -1}, output: "$w", n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1, w: -1}, output: "$w", n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopAndBottomSortByZAndW_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$top: {sortBy: {z: 1, w: -1}, output: ["$w"]}},
|
|
b: {$bottom: {sortBy: {z: 1, w: -1}, output: ["$w"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopNAndBottomNSortByZAndW_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$topN: {sortBy: {z: 1, w: -1}, output: ["$w"], n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1, w: -1}, output: ["$w"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopAndBottomSortByZAndW_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$top: {sortBy: {z: 1, w: -1}, output: ["$w", "$z"]}},
|
|
b: {$bottom: {sortBy: {z: 1, w: -1}, output: ["$w", "$z"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopNAndBottomNSortByZAndW_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$topN: {sortBy: {z: 1, w: -1}, output: ["$w", "$z"], n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1, w: -1}, output: ["$w", "$z"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopAndBottomSortByPAndQ_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$top: {sortBy: {p: -1, q: 1}, output: "$p"}},
|
|
b: {$bottom: {sortBy: {p: -1, q: 1}, output: "$p"}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopNAndBottomNSortByPAndQ_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$topN: {sortBy: {p: -1, q: 1}, output: "$p", n: 3}},
|
|
b: {$bottomN: {sortBy: {p: -1, q: 1}, output: "$p", n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopAndBottomSortByPAndQ_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$top: {sortBy: {p: -1, q: 1}, output: ["$p"]}},
|
|
b: {$bottom: {sortBy: {p: -1, q: 1}, output: ["$p"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopNAndBottomNSortByPAndQ_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$topN: {sortBy: {p: -1, q: 1}, output: ["$p"], n: 3}},
|
|
b: {$bottomN: {sortBy: {p: -1, q: 1}, output: ["$p"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopAndBottomSortByPAndQ_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$top: {sortBy: {p: -1, q: 1}, output: ["$p", "$q"]}},
|
|
b: {$bottom: {sortBy: {p: -1, q: 1}, output: ["$p", "$q"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByNull_TopNAndBottomNSortByPAndQ_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: null,
|
|
a: {$topN: {sortBy: {p: -1, q: 1}, output: ["$p", "$q"], n: 3}},
|
|
b: {$bottomN: {sortBy: {p: -1, q: 1}, output: ["$p", "$q"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopAndBottomSortByPAndQ_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$top: {sortBy: {p: -1, q: 1}, output: "$p"}},
|
|
b: {$bottom: {sortBy: {p: -1, q: 1}, output: "$p"}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopNAndBottomNSortByPAndQ_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$topN: {sortBy: {p: -1, q: 1}, output: "$p", n: 3}},
|
|
b: {$bottomN: {sortBy: {p: -1, q: 1}, output: "$p", n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopAndBottomSortByPAndQ_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$top: {sortBy: {p: -1, q: 1}, output: ["$p"]}},
|
|
b: {$bottom: {sortBy: {p: -1, q: 1}, output: ["$p"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopNAndBottomNSortByPAndQ_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$topN: {sortBy: {p: -1, q: 1}, output: ["$p"], n: 3}},
|
|
b: {$bottomN: {sortBy: {p: -1, q: 1}, output: ["$p"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopAndBottomSortByPAndQ_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$top: {sortBy: {p: -1, q: 1}, output: ["$p", "$q"]}},
|
|
b: {$bottom: {sortBy: {p: -1, q: 1}, output: ["$p", "$q"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByX_TopNAndBottomNSortByPAndQ_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: "$x",
|
|
a: {$topN: {sortBy: {p: -1, q: 1}, output: ["$p", "$q"], n: 3}},
|
|
b: {$bottomN: {sortBy: {p: -1, q: 1}, output: ["$p", "$q"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopAndBottomSortByPAndQ_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$top: {sortBy: {p: -1, q: 1}, output: "$p"}},
|
|
b: {$bottom: {sortBy: {p: -1, q: 1}, output: "$p"}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopNAndBottomNSortByPAndQ_OutputVariable",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$topN: {sortBy: {p: -1, q: 1}, output: "$p", n: 3}},
|
|
b: {$bottomN: {sortBy: {p: -1, q: 1}, output: "$p", n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopAndBottomSortByPAndQ_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$top: {sortBy: {p: -1, q: 1}, output: ["$p"]}},
|
|
b: {$bottom: {sortBy: {p: -1, q: 1}, output: ["$p"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopNAndBottomNSortByPAndQ_OutputOneElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$topN: {sortBy: {p: -1, q: 1}, output: ["$p"], n: 3}},
|
|
b: {$bottomN: {sortBy: {p: -1, q: 1}, output: ["$p"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopAndBottomSortByPAndQ_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$top: {sortBy: {p: -1, q: 1}, output: ["$p", "$q"]}},
|
|
b: {$bottom: {sortBy: {p: -1, q: 1}, output: ["$p", "$q"]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopNAndBottomNSortByPAndQ_OutputTwoElemArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$topN: {sortBy: {p: -1, q: 1}, output: ["$p", "$q"], n: 3}},
|
|
b: {$bottomN: {sortBy: {p: -1, q: 1}, output: ["$p", "$q"], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopNAndBottomNSortByZ_OutputEmptyArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$topN: {sortBy: {z: 1}, output: [], n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1}, output: [], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAndY_TopNAndBottomNSortByZAndW_OutputEmptyArray",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateUpperBound}}},
|
|
{
|
|
$group: {
|
|
_id: {x: "$x", y: "$y"},
|
|
a: {$topN: {sortBy: {z: 1, w: -1}, output: [], n: 3}},
|
|
b: {$bottomN: {sortBy: {z: 1, w: -1}, output: [], n: 3}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByMetaSubField",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{$group: {_id: metaDotRegion, a: {$min: "$x"}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByMetaSubFields",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{$group: {_id: {region: metaDotRegion, series: metaDotSeries}, a: {$min: "$x"}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByMetaMultipleSubFields",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{$group: {_id: {region: metaDotRegion, series: metaDotSeries}, a: {$min: "$x"}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByMetaSubFieldExpression",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{
|
|
$group: {
|
|
_id: {region: {$ifNull: [metaDotRegion, "foo"]}, series: metaDotSeries},
|
|
a: {$min: "$x"},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByIfNullAlwaysNull",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{
|
|
$group: {
|
|
_id: {gb: {$ifNull: ["$x", "$z", null]}, series: metaDotSeries},
|
|
a: {$sum: "$y"},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByIfNullDifferentFinalType",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{
|
|
$group: {
|
|
_id: {gb: {$ifNull: ["$x", "$z", NumberDecimal(37)]}, series: metaDotSeries},
|
|
a: {$sum: "$y"},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByIfNullNeverNull",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{
|
|
$group: {
|
|
_id: {gb: {$ifNull: ["$p", "$q", "$z"]}, series: metaDotSeries},
|
|
a: {$max: "$x"},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByAccumulateIfNullSum",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{$group: {_id: {gb: metaDotRegion}, a: {$sum: {$ifNull: ["$z", "$y", "$p"]}}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByAccumulateIfNullMinMax",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{
|
|
$group: {
|
|
_id: {gb: metaDotRegion},
|
|
a: {$min: {$ifNull: ["$z", 6]}},
|
|
b: {$max: {$ifNull: ["$y", "$missing", -4]}},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByAccumulateIfNullManyArgs",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{
|
|
$group: {
|
|
_id: {gb: metaDotRegion},
|
|
a: {
|
|
$min: {
|
|
$ifNull: [
|
|
"$z",
|
|
"$missing1",
|
|
null,
|
|
"$missing2",
|
|
"$missing3",
|
|
"$y",
|
|
"$missing1",
|
|
[1, 2, 3],
|
|
],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByMetaNonExistent",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{$group: {_id: metaDotNonExistent, a: {$min: "$x"}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByExpressionOnMetaNonExistent",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{$group: {_id: {$toLower: metaDotNonExistent}, a: {$min: "$x"}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByMetaAndMeasurement",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{$group: {_id: {region: metaDotRegion, y: "$y"}, a: {$min: "$x"}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByMetaSubFieldAndTime",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{
|
|
$group: {
|
|
_id: {
|
|
region: metaDotRegion,
|
|
time: {$dateTrunc: {date: dollarPrefixedTime, unit: "hour"}},
|
|
},
|
|
a: {$min: "$x"},
|
|
b: {$max: "$y"},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXMinOfMeta",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{$group: {_id: "$x", a: {$min: dollarPrefixedMeta}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXMinOfMetaSubField",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{$group: {_id: "$x", a: {$min: metaDotSeries}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXMinOfExpressionOfMeta",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{$group: {_id: "$x", a: {$min: {$toLower: metaDotSeries}}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAvgOfMeta",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{$group: {_id: "$x", a: {$avg: dollarPrefixedMeta}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByXAvgOfMetaSubField",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{$group: {_id: "$x", a: {$avg: metaDotSeries}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByComputedField",
|
|
pipeline: [
|
|
{
|
|
$addFields: {
|
|
computedField: {
|
|
$cond: [{$and: [{$isNumber: "$a"}, {$isNumber: "$b"}]}, {$add: ["$a", "$b"]}, null],
|
|
},
|
|
},
|
|
},
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}, computedField: 999}},
|
|
{$group: {_id: "$computedField", a: {$min: "$y"}}},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
{
|
|
name: "GroupByWithComplexIdExpr",
|
|
pipeline: [
|
|
{$match: {[timeFieldName]: {$lt: dateMidPoint}}},
|
|
{
|
|
$group: {
|
|
_id: {$lt: [29336, {$mod: ["$b", 1.0]}]},
|
|
},
|
|
},
|
|
],
|
|
usesBlockProcessing: featureFlagsAllowBlockHashAgg,
|
|
},
|
|
];
|
|
}
|