$replaceWith (置換)
最終更新:2026-10-09
$replaceWith (置換)
$replaceWith は $replaceRoot と似ていますが、式の結果が null や欠落でも失敗せず、元のドキュメントを保持します。可能なら持ち上げる、というシナリオにぴったりです。それ以外の意味は $replaceRoot と同じです。
| カテゴリ | コアステージ |
|---|---|
| MongoDB バージョン | 4.2+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $replaceWith: <document expression> }
⚙️ パラメータ
| ドキュメント式 | 結果がドキュメントを置き換える式。null または欠落していてもかまいません。 |
|---|
戻り値:置き換えられたドキュメントストリーム(結果が null の場合は元を保持)
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $replaceWith: detail があれば昇格する
db.orders.aggregate([
{ $replaceWith: '$detail' }
])
出力:
// detail を持つ注文はそれを出力し、持たないものはそのまま通る
📌 注意事項
- null や欠落の結果では元のドキュメントを保持する。$replaceRoot ならエラーになる
- 式を直接受け取る。$replaceRoot は newRoot で包む
- $mergeObjects と組み合わせて埋め込みオブジェクトを新しいルートにマージすることが多い
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q$replaceWith と $replaceRoot の違いは?
A$replaceWith は結果が null の場合に元のドキュメントを出力します。$replaceRoot はエラーになります。
Q複数フィールドを新しいドキュメントにマージするには?
A$mergeObjects と組み合わせます。例: { $replaceWith: { $mergeObjects: ['$a', '$b'] } }
Q$replaceWith は _id を保持しますか?
Aいいえ。式が _id を明示的に含まない限り保持されません。