Definição
Retorna uma única array que concatena duas ou mais arrays. $concatArrays pode ser usado como acumulador de agregação ou operador de array.
Acumulador de agregação
$concatArrays está disponível como acumulador nestes estágios:
Sintaxe
Quando usado como acumulador de agregação, $concatArrays tem a seguinte sintaxe:
{ $concatArrays: "<array field>" }
Comportamento
Os argumentos que são null ou que resultam em null são incluídos nos resultados. Os argumentos que se referem a um campo ausente não são incluídos nos resultados.
Exemplo
Crie uma coleção denominada sales com os seguintes documentos:
db.sales.insertMany( [ { _id: 1, items: [ "laptop", "tablet" ], location: "NYC" }, { _id: 2, items: [ "phone", "tablet" ], location: "NYC" }, { _id: 3, location: "NYC" }, { _id: 4, items: [ "desktop", { "accessories": [ "mouse", "keyboard"] } ], location: "NYC" } ] )
Este exemplo mostra como você pode utilizar o $concatArrays como acumulador. Este exemplo combina os elementos de todas as arrays items ao agrupar no campo location :
db.sales.aggregate( [ { $group: { _id: "$location", array: { "$concatArrays": "$items" } } } ] )
A operação retorna o seguinte resultado:
[ { "_id": "NYC", "array": [ "laptop", "tablet", "phone", "tablet", "desktop", { "accessories": [ "mouse", "keyboard"] } ] } ]
Operador de array
Sintaxe
Se utilizado como operador de array, $concatArrays tem a seguinte sintaxe:
{ $concatArrays: [ <array1>, <array2>, ... ] }
Comportamento
As expressões do <array> podem ser qualquer expressão válida desde que resolvam para uma array. Para mais informações sobre expressões, consulte Expressões.
Caso algum argumento seja resolvido com um valor null ou caso algum fragmento seja destinado a um campo ausente, $concatArrays retornará null.
Exemplo | Resultados | |||||
|---|---|---|---|---|---|---|
| | |||||
| |
Exemplo
Crie uma coleção denominada warehouses com os seguintes documentos:
db.warehouses.insertMany( [ { _id : 1, instock: [ "chocolate" ], ordered: [ "butter", "apples" ] }, { _id : 2, instock: [ "apples", "pudding", "pie" ] }, { _id : 3, instock: [ "pears", "pecans" ], ordered: [ "cherries" ] }, { _id : 4, instock: [ "ice cream" ], ordered: [ ] } ] )
O exemplo a seguir concatena as arrays instock e ordered :
db.warehouses.aggregate( [ { $project: { items: { $concatArrays: [ "$instock", "$ordered" ] } } } ] )
A operação retorna os seguintes resultados:
[ { _id : 1, items : [ "chocolate", "butter", "apples" ] }, { _id : 2, items : null }, { _id : 3, items : [ "pears", "pecans", "cherries" ] }, { _id : 4, items : [ "ice cream" ] } ]
Limitações
$concatArrays suporta apenas arrays e expressões que resolvem para uma array.