定義
ウィンドウ内のドキュメントから連結された配列値の配列を返します。
注意
曖昧さ回避
このページでは、ウィンドウ関数として使用する場合の$concatArrays について説明します。
次の他のコンテキストでは $concatArrays を使用することもできます。
$concatArrays (accumulator)は、ドキュメントのグループ全体にフィールドの配列値を連結します。$concatArrays (expression)は、2 つ以上の配列を単一のドキュメント内の 1 つの配列に連結します。
構文
{ $setWindowFields: { ... output: { <field>: { $concatArrays: "<array field>" } } } }
動作
null であるか、null に解決される引数は結果に含まれます。欠落しているフィールドを参照する引数は結果に含まれません。
例
以下の例では、sample_mflix サンプル データセットの movies コレクションを使用します。このデータセットを配置にロードする方法について詳しくは、「サンプル データセットのロード」を参照してください。
この例では、$setWindowFields genresを使用して映画をリリース年ごとに分割し、各パーティション内の 配列をタイトル順に連結します。各ドキュメントは、パーティション内の最初の映画から現在のドキュメントまでの 配列の連結を受け取ります。genres
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 } } ] )
先行するパイプライン:
を使用して、 と
$setWindowFieldsで映画を分割し、各パーティションを でソートします。ステージでは、yearpartitionBytitle$concatArraysgenresのドキュメントウィンドウを介して フィールドに が適用されます。[ "unbounded", "current" ]combinedGenresフィールドには、パーティションの最初の映画から現在のドキュメントまでの連結されたジャンルが保持されます。$projectyearを使用して、 、title、combinedGenresを出力に含めます。
combinedGenres 配列は、各ドキュメントがgenres 配列に貢献するにつれて、各パーティション内で大きくなります。