$setDifference(集計)
定義
$setDifference
2 つのセットを受け取り、最初のセットにのみ存在する要素を含む配列を返します。つまり、 相対補完 を実行します 最初のセットに対する 2 番目のセットの 。
$setDifference
の構文は次のとおりです。{ $setDifference: [ <expression1>, <expression2> ] } 引数は、それぞれが配列に変換される限り、有効な式であれば何でも使用できます。 式の詳細については、「式 」を参照してください。
動作
$setDifference
は、配列をセットとして扱い、配列に対してセット演算を実行します。 配列に重複エントリが含まれている場合、 $setDifference
は重複エントリを無視します。 $setDifference
は要素の順序を無視します。
$setDifference
は結果内の重複を除外して、一意のエントリのみを含む配列を出力します。 出力配列内の要素の順序は指定されていません。
セットにネストされた配列要素が含まれている場合、 $setDifference
はネストされた配列に下降 せず、最上位の配列を評価します。
例 | 結果 | ||
---|---|---|---|
|
| ||
|
|
例
以下のドキュメントを持つ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" ] } ] )
次の操作では、 $setDifference
演算子を使用して、 flowerFieldB
配列には含まれるがflowerFieldA
配列には含まれない要素の配列を返します。
db.flowers.aggregate( [ { $project: { flowerFieldA: 1, flowerFieldB: 1, inBOnly: { $setDifference: [ "$flowerFieldB", "$flowerFieldA" ] }, _id: 0 } } ] )
この操作は次の結果を返します。
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid" ], "inBOnly" : [ ] } { "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "orchid", "rose", "orchid" ], "inBOnly" : [ ] } { "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid", "jasmine" ], "inBOnly" : [ "jasmine" ] } { "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "jasmine", "rose" ], "inBOnly" : [ "jasmine" ] } { "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ ], "inBOnly" : [ ] } { "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose" ], [ "orchid" ] ], "inBOnly" : [ [ "rose" ], [ "orchid" ] ] } { "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose", "orchid" ] ], "inBOnly" : [ [ "rose", "orchid" ] ] } { "flowerFieldA" : [ ], "flowerFieldB" : [ ], "inBOnly" : [ ] } { "flowerFieldA" : [ ], "flowerFieldB" : [ "rose" ], "inBOnly" : [ "rose" ] }