1954 lines
73 KiB
JavaScript
1954 lines
73 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
|
|
},
|
|
];
|
|
}
|