mirror of https://github.com/mongodb/mongo
99 lines
2.8 KiB
JavaScript
99 lines
2.8 KiB
JavaScript
/*
|
|
* Tests $max and $min when used as aggregation expressions.
|
|
*/
|
|
|
|
let coll = db.collection;
|
|
assert(coll.drop());
|
|
coll.insertOne({
|
|
"int1": 5,
|
|
"int2": 10,
|
|
"str1": "hello",
|
|
"str2": "hello world",
|
|
"NaN": NaN,
|
|
"arr1": [5],
|
|
"arr2": [1, 2, 3],
|
|
"arr3": [1, 2, "string", null],
|
|
"arr4": [],
|
|
"arrNest1": [[1, 2]],
|
|
"arrNest2": [
|
|
[1, 2],
|
|
[3, 4],
|
|
],
|
|
"arrNest3": [[[1, 2, 3]]],
|
|
"arrNest4": [[[1, 2, 3]], 1],
|
|
"arrMixed1": [[], "hello", ["c"]],
|
|
"arrMixed2": [[], "hello", ["c"], null],
|
|
"null": null,
|
|
"undefined1": [undefined],
|
|
"undefined2": [undefined, 2, "string"],
|
|
});
|
|
|
|
function assertResultMax(expected, params) {
|
|
assert.eq(expected, coll.aggregate({$project: {a: {$max: params}}}).toArray()[0].a);
|
|
}
|
|
|
|
function assertResultMin(expected, params) {
|
|
assert.eq(expected, coll.aggregate({$project: {a: {$min: params}}}).toArray()[0].a);
|
|
}
|
|
|
|
// Test single parameter.
|
|
assertResultMax(null, []);
|
|
assertResultMax(null, "$arr4");
|
|
assertResultMax(5, "$arr1");
|
|
assertResultMax(5, "$int1");
|
|
assertResultMax("hello", "$str1");
|
|
assertResultMax(NaN, "$NaN");
|
|
assertResultMax(null, "$null");
|
|
|
|
assertResultMin(null, []);
|
|
assertResultMin(null, "$arr4");
|
|
assertResultMin(5, "$arr1");
|
|
assertResultMin(5, "$int1");
|
|
assertResultMin("hello", "$str1");
|
|
assertResultMin(NaN, "$NaN");
|
|
assertResultMin(null, "$null");
|
|
|
|
// Test multiple parameters.
|
|
assertResultMax(10, ["$int2", "$int1"]);
|
|
assertResultMax("hello", ["$int2", "$int1", "$str1"]);
|
|
assertResultMax("hello world", ["$str1", "$str2"]);
|
|
|
|
assertResultMin(5, ["$int2", "$int1"]);
|
|
assertResultMin(5, ["$int2", "$int1", "$str1"]);
|
|
assertResultMin("hello", ["$str1", "$str2"]);
|
|
|
|
// Tests single array param.
|
|
assertResultMax(null, "$undefined1");
|
|
assertResultMax("string", "$undefined2");
|
|
assertResultMax(3, "$arr2");
|
|
assertResultMax("string", "$arr3");
|
|
|
|
assertResultMin(null, "$undefined1");
|
|
assertResultMin(2, "$undefined2");
|
|
assertResultMin(1, "$arr2");
|
|
assertResultMin(1, "$arr3");
|
|
|
|
// Test nested arrays.
|
|
assertResultMax([1, 2], "$arrNest1");
|
|
assertResultMax([3, 4], "$arrNest2");
|
|
assertResultMax([[1, 2, 3]], "$arrNest3");
|
|
assertResultMax([1, 2, 3], ["$arr2", []]);
|
|
assertResultMax([[1, 2, 3]], "$arrNest4");
|
|
assertResultMax(["c"], "$arrMixed1");
|
|
assertResultMax([[], "hello", ["c"], null], ["$arrMixed1", "$arrMixed2"]);
|
|
|
|
assertResultMin([1, 2], "$arrNest1");
|
|
assertResultMin([1, 2], "$arrNest2");
|
|
assertResultMin([[1, 2, 3]], "$arrNest3");
|
|
assertResultMin([], ["$arr2", []]);
|
|
assertResultMin(1, "$arrNest4");
|
|
assertResultMin("hello", "$arrMixed1");
|
|
assertResultMin([[], "hello", ["c"]], ["$arrMixed1", "$arrMixed2"]);
|
|
|
|
// Multiple null or undefined params
|
|
assertResultMax(null, [null, "$null", "$doesNotExist"], undefined);
|
|
|
|
assertResultMin(null, [null, "$null", "$doesNotExist"], undefined);
|
|
|
|
assert(coll.drop());
|