$setDifference (集合の差)

最終更新:2026-10-09

$setDifference (集合の差)

$setDifference は、最初の配列には含まれるが 2 番目の配列には含まれない要素を、重複を除去して返します。代表的な用途は、ユーザーが購入したがお気に入り登録していない商品の特定や、2 つの名前リストの差分取得です。両方の引数は配列でなければならず、null 要素は無視されます。結果の順序は保証されず、重複除去後の位置関係も維持されません。集合演算子は配列を集合として扱い、$setIntersection や $setUnion と同族です。

カテゴリ集合・条件・変換
MongoDB バージョン1.0+
例の言語mongosh(シェル)

📝 構文

{ $setDifference: [ <arrayA>, <arrayB> ] }

⚙️ パラメータ

配列A減算の対象となる集合。
配列B減算する集合。

戻り値:A に含まれ B に含まれない要素の(重複排除された)配列。いずれかの引数が null の場合は null

▶ 例

以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):

// $setDifference: 購入済みだがお気に入りではない商品
db.users.aggregate([
  { $project: {
      notFav: { $setDifference: ['$bought', '$favorites'] }
  } }
])

出力:

{ '_id': 1, 'notFav': [ 'skuB' ] }

📌 注意事項

さらなる実践ケースを近日公開予定。

📚 関連チュートリアル

❓ よくある質問

Q結果は重複が除去されますか?
Aはい — 集合の意味論により各要素は 1 回だけ現れます。
Q入力の順序は保持されますか?
A保証されません — 後段で順序に依存しないでください。
Q$filter との違いは?
A$filter は要素ごとに条件で除去します。$setDifference は別の配列に対する集合の差を計算します。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%