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

$setIsSubset(集計)

$setIsSubset

2 つの配列を受け取り、最初の配列が 2 番目の配列のサブセットである場合はtrueを返し、最初の配列が 2 番目の配列と等しい場合を返し、それ以外の場合はfalseを返します。

$setIsSubset の構文は次のとおりです。

{ $setIsSubset: [ <expression1>, <expression2> ] }

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

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

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

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

false

サブセットではありません。2 番目の配列に c が存在しないためです。

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

true

最初の配列内の両方の要素が 2 番目の配列に存在します。

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

true

最初の配列 ["a", "b"] の一意の要素のみが考慮されるため、重複要素やその順序に関係なく、最初の配列は 2 番目の配列のサブセットであり、結果は true になります。

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

false

2 番目の配列 [ [ "a", "b" ] ] には 1 つの要素が含まれており、それ自体は配列です。したがって、最初の配列 [ "a", "b" ] は 2 番目の配列のサブセットとは見なされず、結果は false となります。

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

true

空のセットは、任意のセットのサブセットと見なされます。

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

true

セットは、それ自体のサブセットです。重複する要素はサブセットの評価に影響を与えません。

以下のドキュメントを持つ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" ] }
] )

次の操作では、 $setIsSubset演算子を使用して、 flowerFieldA配列がflowerFieldB配列のサブセットであるかどうかを判断します。

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

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

{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid" ], "AisSubset" : true }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "orchid", "rose", "orchid" ], "AisSubset" : true }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid", "jasmine" ], "AisSubset" : true }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "jasmine", "rose" ], "AisSubset" : false }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ ], "AisSubset" : false }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose" ], [ "orchid" ] ], "AisSubset" : false }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose", "orchid" ] ], "AisSubset" : false }
{ "flowerFieldA" : [ ], "flowerFieldB" : [ ], "AisSubset" : true }
{ "flowerFieldA" : [ ], "flowerFieldB" : [ "rose" ], "AisSubset" : true }

戻る

$setIntersection

項目一覧