定義
$setEquals
2 つ以上の配列を比較し、それらが同じ明確な要素を持つ場合は
true
を返し、そうでない場合はfalse
を返します。$setEquals
の構文は次のとおりです。{ $setEquals: [ <expression1>, <expression2>, ... ] } 引数は、それぞれが配列に変換される限り、有効な式であれば何でも使用できます。 式の詳細については、「式 」を参照してください。
動作
$setEquals
は、配列をセットとして扱い、配列に対してセット演算を実行します。 配列に重複エントリが含まれている場合、 $setEquals
は重複エントリを無視します。 $setEquals
は要素の順序を無視します。
セットにネストされた配列要素が含まれている場合、 $setEquals
はネストされた配列に下降 せず、最上位の配列を評価します。
例 | 結果 | ノート | ||||
---|---|---|---|---|---|---|
|
| 配列には同じ要素は含まれません。 | ||||
|
| 配列には同じ要素は含まれません。 | ||||
|
| どちらの配列にも同じ一意の要素が含まれています。セットとして扱われる場合、重複は無視されるため、最初の配列は | ||||
|
| 配列内の要素は等しくありません。最初の配列には文字列 | ||||
|
| 配列内の要素は等しくありません。最初の配列は空で、2 番目の配列には 2 つの文字列要素があります。 | ||||
|
| 配列には同じ一意の要素が含まれることはありません。最初の配列には |
例
以下のドキュメントを持つbakeryOrders
コレクションを考えてみましょう。
db.bakeryOrders.insertMany( [ { _id: 0, cakes: ["chocolate", "vanilla"], cupcakes: ["chocolate", "vanilla"] }, { _id: 1, cakes: ["chocolate", "vanilla"], cupcakes: ["vanilla", "chocolate"] }, { _id: 2, cakes: ["chocolate", "chocolate"], cupcakes: ["chocolate"] }, { _id: 3, cakes: ["vanilla"], cupcakes: ["chocolate"] }, { _id: 4, cakes: ["vanilla"], cupcakes: [] } ] )
次の操作では、 $setEquals
演算子を使用して、各順序のcakes
配列とcupcakes
配列に同じフレーバーが含まれているかどうかを判断します。
db.bakeryOrders.aggregate( [ { $project: { _id: 0, cakes: 1, cupcakes: 1, sameFlavors: { $setEquals: [ "$cakes", "$cupcakes" ] } } } ] )
注意
$project
この操作は次の結果を返します。
{ cakes: [ "chocolate", "vanilla" ], cupcakes: [ "chocolate", "vanilla" ], sameFlavors: true }, { cakes: [ "chocolate", "vanilla" ], cupcakes: [ "vanilla", "chocolate" ], sameFlavors: true }, { cakes: [ "chocolate", "chocolate" ], cupcakes: [ "chocolate" ], sameFlavors: true }, { cakes: [ "vanilla" ], cupcakes: [ "chocolate" ], sameFlavors: false }, { cakes: [ "vanilla" ], cupcakes: [], sameFlavors: false }