定義
2 つ以上の配列を受け取り、任意の入力配列に現れる一意の要素を含む 1 つの配列を返します。
注意
曖昧さ回避
このページでは、2$setUnion つ以上の配列を一意の要素の 1 つの配列に結合する式として使用する場合、 について説明します。
次の他のコンテキストでは $setUnion を使用することもできます。
$setUnion (accumulator)は、ドキュメントのグループ全体の 配列値内の一意の要素の 1 つの配列を返します。$setUnion (window function)$setWindowFieldsは、ウィンドウの配列値内の一意の要素の 1 つの配列を返すために ステージで使用されます。
構文
{ $setUnion: [ <expression1>, <expression2>, ... ] }
動作
$setUnion 配列をセットとして扱い、配列に対してセット操作を実行します。配列に重複するエントリが含まれている場合、$setUnion は重複するエントリを無視します。 $setUnion は要素の順序を無視します。
$setUnion は結果内の重複を除外して、一意のエントリのみを含む配列を出力します。出力配列内の要素の順序は指定されていません。
引数は、それぞれが配列に変換される限り、どのような有効な式でも使用できます。 式の詳細については、「式 」を参照してください。
セットにネストされた配列要素が含まれている場合、$setUnion はネストされた配列に下降 せず 、最上位の配列を評価します。
次の表は、さまざまな入力に対して $setUnion が返す結果を示しています。
例 | 結果 | ノート | |||||
|---|---|---|---|---|---|---|---|
| | 両方の配列のすべての要素が結合され、重複する要素が削除されます。 | |||||
| | 両方の配列のすべての要素が結合され、重複する要素が削除されます。 | |||||
| | 両方の配列のすべての要素が結合され、重複する要素が削除されます。 | |||||
| | 結果には、個々の string 要素として | |||||
| | 最初の配列が空であるため、結果は 2 番目の配列の一意の要素で構成されています。 | |||||
| | 両方の配列のすべての要素が結合され、重複する要素が削除されます。 |
例
このページの例では、 sample_mflix データセット のデータを使用します。このデータセットを自己管理型MongoDBデプロイにロードする 方法の詳細については、「 サンプル データセットをロードする 」を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。
この例では、$setUnion を使用して、cast 配列と directors 配列を各映画にクレジットされた人物の単一の配列に結合します。
db.movies.aggregate( [ { $match: { title: { $in: [ "Annie Hall", "Reservoir Dogs" ] } } }, { $project: { _id: 0, title: 1, cast: 1, directors: 1, keyContributors: { $setUnion: [ "$cast", "$directors" ] } } }, { $sort: { title: 1 } } ] )
先行するパイプライン:
$match2 つの映画をフィルタリングするには、 を使用します。を と併用して、
$project$setUnioncastとdirectorskeyContributorsを フィールドに結合します。$sort結果をtitleで並べ替えるには、 を使用します。
Annie Hall の場合、Wuby Atlas は cast と directors の両方に表示されますが、keyContributors には 1 回だけ表示されます。これは、$setUnion が重複要素を削除するためです。
制限
$setUnionは、配列と配列に解決される式のみをサポートします。