Reputation: 2262
An aggregation yielded two arrays: $array1
and $array2
:
$array1 = [{ key1_1: 0,
key1_2: 1,
key1_3: 2
},
{ key1_1: 0,
key1_2: 1,
key1_3: 2
}]
$array2 = [{ key2_1: 0,
key2_2: 1
},
{ key2_1: 0,
key2_2: 1
}]
I would like to join them completely.
If I do this:
{ $project: { 'output': { $concatArrays: [ '$array1', '$array2' ] } }
the result will be this:
output: [{ key1_1: 0,
key1_2: 1,
key1_3: 2
},
{ key2_1: 0,
key2_2: 1
},
{ key1_1: 0,
key1_2: 1,
key1_3: 2
},
{ key2_1: 0,
key2_2: 1
}]
whereas I would prefer this:
output: [{ key1_1: 0,
key1_2: 1,
key1_3: 2,
key2_1: 0,
key2_2: 1
},
{ key1_1: 0,
key1_2: 1,
key1_3: 2,
key2_1: 0,
key2_2: 1
}]
I guess this is only possible by $project
, but how?
Upvotes: 2
Views: 2138
Reputation: 2262
Here is a solution, which is not exactly what I wanted, but it's good enough.
In the aggregation, first
{ $unwind: '$array1' },
{ $unwind: '$array2' },
then do a grouping:
{ $group: { _id: '$_id',
arrays: { $push: {
array1: '$array1',
array2: '$array2'
}
}
}
},
The result will be:
"arrays": {[
"array1": {
...
},
"array2": {
...
}
]}
Upvotes: 1
Reputation: 51446
Not aggregation could be easier?:
> var a =[];
> var array1 = [{ key1_1: 0, key1_2: 1, key1_3: 2 }, { key1_1: 0, key1_2: 1, key1_3: 2 }];
> var array2 = [{ key2_1: 0, key2_2: 1 }, { key2_1: 0, key2_2: 1 }];
> array1.forEach(function(o,i){a.push(Object.assign(array1[i],array2[i]));});
> printjson(a);
[
{
"key1_1" : 0,
"key1_2" : 1,
"key1_3" : 2,
"key2_1" : 0,
"key2_2" : 1
},
{
"key1_1" : 0,
"key1_2" : 1,
"key1_3" : 2,
"key2_1" : 0,
"key2_2" : 1
}
]
Upvotes: 0