Docs Menu
Docs Home
/
データベース マニュアル
/ / /

$setUnion

2 つ以上の配列を受け取り、任意の入力配列に現れる一意の要素を含む 1 つの配列を返します。$setUnion は、集計アキュムレータまたは配列演算子として使用できます。

$setUnion

$setUnion は、次のステージでアキュムレータとして使用できます。

  • $bucket

  • $bucketAuto

  • $group

  • $setWindowFields

集計アキュムレータとして使用する場合、 $setUnionは次の構文をとります。

{ $setUnion: "<array field>" }

$setUnionは、配列をセットとして扱い、配列に対してセット演算を実行します。 配列に重複エントリが含まれている場合、 $setUnionは重複エントリを無視します。 $setUnionは要素の順序を無視します。

$setUnion は結果内の重複を除外して、一意のエントリのみを含む配列を出力します。出力配列内の要素の順序は指定されていません。

セットにネストされた配列要素が含まれている場合、$setUnion はネストされた配列に下降 せず 、最上位の配列を評価します。

null であるか、null に解決される引数は結果に含まれます。欠落しているフィールドを参照する引数は結果に含まれません。

次のドキュメントを含むsalesという名前のコレクションを作成します。

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"
}
] )

この例では、$setUnion をアキュムレータとして使用する方法を示します。この例では、locationフィールドでグループ化するときに、items 配列内のすべての一意の要素を累積します。

db.sales.aggregate( [
{
$group: {
_id: "$location",
array: { "$setUnion": "$items" }
}
}
] )

この操作では、次の結果を返します。

[
{
"_id": "NYC",
"array": [
"laptop", "tablet", "phone", "desktop", { "accessories": [ "mouse", "keyboard"] }
]
}
]
$setUnion

配列演算子として使用する場合、 $setUnionは次の構文をとります。

{
$setUnion: [ <expression1>, <expression2>, ... ]
}

$setUnionは、配列をセットとして扱い、配列に対してセット演算を実行します。 配列に重複エントリが含まれている場合、 $setUnionは重複エントリを無視します。 $setUnionは要素の順序を無視します。

$setUnion は結果内の重複を除外して、一意のエントリのみを含む配列を出力します。出力配列内の要素の順序は指定されていません。

引数は、それぞれが配列に変換される限り、どのような有効なでも使用できます。 式の詳細については、「式 」を参照してください。

セットにネストされた配列要素が含まれている場合、$setUnion はネストされた配列に下降 せず 、最上位の配列を評価します。

結果
ノート
{ $setUnion: [
[ "a", "c" ],
[ "a", "b" ]
] }
[ "a", "c", "b" ]

両方の配列のすべての要素が結合され、重複する要素が削除されます。

{ $setUnion: [
[ "a", "c" ],
[ "a", "b", "c" ]
] }
[ "a", "c", "b" ]

両方の配列のすべての要素が結合され、重複する要素が削除されます。

{ $setUnion: [
[ "a", "b", "a" ],
[ "b", "a" ]
] }
[ "a", "b" ]

両方の配列のすべての要素が結合され、重複する要素が削除されます。

{ $setUnion: [
[ "a", "b" ],
[ [ "a", "b" ] ]
] }
[ "a", "b", [ "a", "b" ] ]

結果には、個々の string 要素として "a""b" と、一意の要素として配列 [ "a", "b" ] が含まれます。

{ $setUnion: [
[ ],
[ "a", "b" ]
] }
[ "a", "b" ]

最初の配列が空であるため、結果は 2 番目の配列の一意の要素で構成されています。

{ $setUnion: [
[ "a", "a" ],
[ "a", "b" ]
] }
[ "a", "b" ]

両方の配列のすべての要素が結合され、重複する要素が削除されます。

以下のドキュメントを持つflowersコレクションを検討してください。

db.flowers.insertMany( [
{ "_id" : 1, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid" ] },
{ "_id" : 2, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "orchid", "rose", "orchid" ] },
{ "_id" : 3, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid", "jasmine" ] },
{ "_id" : 4, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "jasmine", "rose" ] },
{ "_id" : 5, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ ] },
{ "_id" : 6, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose" ], [ "orchid" ] ] },
{ "_id" : 7, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose", "orchid" ] ] },
{ "_id" : 8, "flowerFieldA" : [ ], "flowerFieldB" : [ ] },
{ "_id" : 9, "flowerFieldA" : [ ], "flowerFieldB" : [ "rose" ] }
] )

次の操作では、 $setUnion演算子を使用して、 flowerFieldA配列またはflowerFieldB配列、またはその両方にある要素の配列を返します。

db.flowers.aggregate(
[
{ $project: { flowerFieldA:1, flowerFieldB: 1, allValues: { $setUnion: [ "$flowerFieldA", "$flowerFieldB" ] }, _id: 0 } }
]
)

この操作は次の結果を返します。

{ "flowerFieldA": [ "rose", "orchid" ], "flowerFieldB": [ "rose", "orchid" ], "allValues": [ "orchid", "rose" ] }
{ "flowerFieldA": [ "rose", "orchid" ], "flowerFieldB": [ "orchid", "rose", "orchid" ], "allValues": [ "orchid", "rose" ] }
{ "flowerFieldA": [ "rose", "orchid" ], "flowerFieldB": [ "rose", "orchid", "jasmine" ], "allValues": [ "orchid", "rose", "jasmine" ] }
{ "flowerFieldA": [ "rose", "orchid" ], "flowerFieldB": [ "jasmine", "rose" ], "allValues": [ "orchid", "rose", "jasmine" ] }
{ "flowerFieldA": [ "rose", "orchid" ], "flowerFieldB": [ ], "allValues": [ "orchid", "rose" ] }
{ "flowerFieldA": [ "rose", "orchid" ], "flowerFieldB": [ [ "rose" ], [ "orchid" ] ], "allValues": [ "orchid", "rose", [ "rose" ], [ "orchid" ] ] }
{ "flowerFieldA": [ "rose", "orchid" ], "flowerFieldB": [ [ "rose", "orchid" ] ], "allValues": [ "orchid", "rose", [ "rose", "orchid" ] ] }
{ "flowerFieldA": [ ], "flowerFieldB": [ ], "allValues": [ ] }
{ "flowerFieldA": [ ], "flowerFieldB": [ "rose" ], "allValues": [ "rose" ] }
  • $setUnion は、配列と配列に解決される式のみをサポートします。

  • $setUnion は、出力配列内の要素の順序を保証しません。

戻る

$setIsSubset

項目一覧