Definição
Retorna uma única array que concatena duas ou mais arrays. $concatArrays
pode ser utilizado como um acumulador de agregação ou um 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.
Se algum argumento for resolvido com um valor null
ou se referir 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.