// 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);