Definição
Retorna uma array dos valores de array concatenados de documentos em uma janela.
Observação
Desambiguação
Esta página descreve $concatArrays quando usado como uma função de janela.
Você também pode usar $concatArrays nestes outros contextos:
$concatArrays (accumulator), que concatena os valores de array de um campo em um grupo de documentos.$concatArrays (expression), que concatena duas ou mais arrays em uma única array dentro de um único documento.
Sintaxe
{ $setWindowFields: { ... output: { <field>: { $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
O exemplo a seguir usa a coleção movies do conjunto de dados de amostra sample_mflix. Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação, consulte Carregar o conjunto de dados de amostra.
O exemplo usa $setWindowFields para dividir filmes por ano de lançamento e concatenar as arrays genres dentro de cada partição, classificadas por título. Cada documento recebe a concatenação das arrays genres do primeiro filme em sua partição até o documento atual:
db.movies.aggregate( [ { $match: { year: { $in: [1914, 1915] } } }, { $setWindowFields: { partitionBy: { year: "$year" }, sortBy: { title: 1 }, output: { combinedGenres: { $concatArrays: "$genres", window: { documents: ["unbounded", "current"] } } } } }, { $project: { _id: 0, year: 1, title: 1, combinedGenres: 1 } } ] )
O pipeline anterior:
Usa
$setWindowFieldspara dividir filmes poryearcompartitionBye classificar cada partição portitle. O estágio aplica$concatArraysao campogenresem uma janela de documentos de[ "unbounded", "current" ]. O campocombinedGenrescontém os gêneros concatenados do primeiro filme na partição até o documento atual.Utiliza
$projectpara incluiryear,titleecombinedGenresna saída.
A array combinedGenres cresce dentro de cada partição à medida que cada documento contribui com sua array genres.