summaryrefslogtreecommitdiff
path: root/jstests/aggregation/bugs/server14872.js
blob: 8f4b84701da577677d810760d4221e96b9a27471 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// SERVER-14872: Aggregation expression to concatenate multiple arrays into one
// @tags: [
//   sbe_incompatible,
// ]

// For assertErrorCode.
load('jstests/aggregation/extras/utils.js');

(function() {
'use strict';

var 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.
var 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]}]);

// Concatenation with no arguments.
pipeline = [{$project: {_id: 0, all: {$concatArrays: []}}}];
assert.eq(coll.aggregate(pipeline).toArray(), [{all: []}]);

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