$unionWith (和集合)
最終更新:2026-10-09
$unionWith (和集合)
$unionWith は、パイプラインがこれまでに累積した結果と別のコレクション(同じコレクションでも可)のドキュメントを結合し、必要ならサブパイプラインでそのコレクションを前処理します。デフォルトの出力は重複排除なしの和集合です。複数のコレクションを 1 つのレポートストリームにまとめるのに適しており、形の異なるドキュメントが共存しても問題ありません。
| カテゴリ | 高度と診断 |
|---|---|
| MongoDB バージョン | 4.4+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $unionWith: { coll: "<collection>", pipeline: [ <sub-pipeline> ] } }
⚙️ パラメータ
| coll | 和集合を取る対象コレクション。 |
|---|---|
| pipeline | 対象コレクションを前処理する任意のサブパイプライン。 |
戻り値:両方のソースをマージしたドキュメントストリーム
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $unionWith: q2 をフィルター付きで q1 に結合
db.q1.aggregate([
{ $unionWith: { coll: 'q2', pipeline: [{ $match: { active: true } }] } }
])
出力:
// q1 の結果に加えて、active な q2 のドキュメントが加わる
📌 注意事項
- 重複排除は行われず、同一ドキュメントが 2 回出ることがある
- サブパイプラインでターゲットコレクションを $match や $project などで処理できる
- フィールドの形が異なっていても結合を妨げない
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q$unionWith は重複を排除しますか?
Aいいえ。両方のソースを結合するだけで、重複が出ることがあります。
Qサブパイプラインでソートできますか?
Aはい。$out、$merge、$facet 以外の通常ステージを使えます。
Q同じコレクションを 2 回結合できますか?
Aはい。coll に現在のコレクションを指定すれば自己結合になります。