findOneAndReplace() (置換してドキュメントを返す)

最終更新:2026-10-09

findOneAndReplace() (置換してドキュメントを返す)

findOneAndReplace() はフィルタに一致する最初のドキュメントを置換ドキュメントに入れ替え、置換前または置換後のドキュメントを返します。例: `db.users.findOneAndReplace({ name: 'Bob' }, { name: 'Bob', age: 26 }, { returnDocument: 'after' })`。置換結果を必要とするフローに適した、ドキュメントを読み戻す replaceOne() です。_id 以外のすべてのフィールドが上書きされます。

カテゴリ書き込み
MongoDB バージョン1.0+
例の言語mongosh(シェル)

📝 構文

db.<collection>.findOneAndReplace(<filter>, <replacement>, { returnDocument: 'after', upsert: <bool> })

⚙️ パラメータ

フィルター条件置き換えるドキュメントにマッチする述語。
新しいドキュメント完全な置換。_id 以外のすべてのフィールドを上書きします。
returnDocument任意。'before' または 'after'。既定は 'before'。

戻り値:置き換え前(または置き換え後)のドキュメント。何もマッチせず upsert が無効の場合は null。

▶ 例

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

// findOneAndReplace: Bob のドキュメントを入れ替え、新しいものを返す
const doc = db.users.findOneAndReplace(
  { name: 'Bob' }, { name: 'Bob', age: 26, vip: true },
  { returnDocument: 'after' }
)
doc

出力:

{
  _id: ObjectId('64c8a1b20000000000000002'),
  name: 'Bob',
  age: 26,
  vip: true
}

📌 注意事項

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

📚 関連チュートリアル

❓ よくある質問

QfindOneAndReplace と replaceOne の違いは何ですか?
AreplaceOne() はカウンタを返します。findOneAndReplace() は入れ替え前後のドキュメントを返します。
QfindOneAndReplace で _id を変更できますか?
Aできません。置換ドキュメントは元の _id を保持する必要があり、保持しないと操作がエラーになります。
Qupsert オンの場合、findOneAndReplace は何を返しますか?
A一致するものが無い場合、新しいドキュメントが挿入されて返され、新しく生成された _id を持ちます。
Web-Tutorial.com

Web-Tutorial 技術チーム

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

100%