$replaceRoot (ルートの置換)

最終更新:2026-10-09

$replaceRoot (ルートの置換)

$replaceRoot は、ドキュメント全体を指定した埋め込みドキュメントで置き換えます。detail のようなネストしたオブジェクトをトップレベルに持ち上げるのに一般的に使います。元のフィールドはすべて失われます。対象が存在しない、またはオブジェクトでない場合はエラーになります。$ifNull でガードするか、結果が null の場合に元のドキュメントを保持する $replaceWith を使います。

カテゴリコアステージ
MongoDB バージョン1.0+
例の言語mongosh(シェル)

📝 構文

{ $replaceRoot: { newRoot: <document expression> } }

⚙️ パラメータ

newRoot新しいドキュメントとなるように評価される式。オブジェクトである必要があります。

戻り値:newRoot をルートとするドキュメントストリーム

▶ 例

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

// $replaceRoot: detail をルートに昇格
db.orders.aggregate([
  { $replaceRoot: { newRoot: '$detail' } }
])

出力:

// 元の注文フィールドは消え、detail だけが残る
{ "city": "SH", "zip": "200000" }

📌 注意事項

📚 関連チュートリアル

❓ よくある質問

Q$replaceRoot と $project の違いは?
A$project は元のドキュメントからフィールドを選択・計算します。$replaceRoot はまったく新しいドキュメントに入れ替えます。
QnewRoot のフィールドが存在しない場合は?
Aエラーになります。$ifNull でガードするか、$replaceWith バリアントを使います。
Qすべてを置き換えずに 1 階層だけ持ち上げるには?
A部分的な持ち上げには $project のドットパス式を使います。$replaceRoot はルート全体を置き換えます。
Web-Tutorial.com

Web-Tutorial 技術チーム

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

100%