mongo/jstests/aggregation/expressions/concat_arrays2.js

33 lines
1.3 KiB
JavaScript

// SERVER-14872: Aggregation expression to concatenate multiple arrays into one
import "jstests/libs/query/sbe_assert_error_override.js";
import {assertErrorCode} from "jstests/aggregation/extras/utils.js";
let coll = db.agg_concat_arrays_expr;
coll.drop();
assert.commandWorked(coll.insert({a: [1, 2], b: ["three"], c: [], d: [[3], 4], e: null, str: "x"}));
// Basic concatenation.
let pipeline = [{$project: {_id: 0, all: {$concatArrays: ["$a", "$b", "$c"]}}}];
assert.eq(coll.aggregate(pipeline).toArray(), [{all: [1, 2, "three"]}]);
// Concatenation with nested arrays.
pipeline = [{$project: {_id: 0, all: {$concatArrays: ["$a", "$d"]}}}];
assert.eq(coll.aggregate(pipeline).toArray(), [{all: [1, 2, [3], 4]}]);
// Concatenation with 1 argument.
pipeline = [{$project: {_id: 0, all: {$concatArrays: ["$a"]}}}];
assert.eq(coll.aggregate(pipeline).toArray(), [{all: [1, 2]}]);
// Any nullish inputs will result in null.
pipeline = [{$project: {_id: 0, all: {$concatArrays: ["$a", "$e"]}}}];
assert.eq(coll.aggregate(pipeline).toArray(), [{all: null}]);
pipeline = [{$project: {_id: 0, all: {$concatArrays: ["$a", "$f"]}}}];
assert.eq(coll.aggregate(pipeline).toArray(), [{all: null}]);
// Error on any non-array, non-null inputs.
pipeline = [{$project: {_id: 0, all: {$concatArrays: ["$a", "$str"]}}}];
assertErrorCode(coll, pipeline, 28664);