findOneAndDelete() (削除してドキュメントを返す)
最終更新:2026-10-09
findOneAndDelete() (削除してドキュメントを返す)
findOneAndDelete() はフィルタに一致する最初のドキュメントを削除し、削除されたドキュメント自体を返します。例: `db.users.findOneAndDelete({ name: 'Cara' })`。カウンタのみを返す deleteOne() と異なり、完全なドキュメントを返すため、アーカイブや監査ログの削除に便利です。一致するものが無い場合は null を返します。
| カテゴリ | 書き込み |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
db.<collection>.findOneAndDelete(<filter>, { projection: <fields> })
⚙️ パラメータ
| フィルター条件 | 削除するドキュメントにマッチする述語。 |
|---|---|
| projection | 任意。削除されたドキュメントのどのフィールドを返すかを制御します。 |
戻り値:削除されたドキュメント。何もマッチしない場合は null。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// findOneAndDelete: Cara を削除し、そのレコードを表示する
const removed = db.users.findOneAndDelete({ name: 'Cara' })
removed
出力:
{
_id: ObjectId('64c8a1b20000000000000003'),
name: 'Cara',
age: 30
}
📌 注意事項
- アーカイブや監査のために、削除したドキュメントを返す
- 最初の一致のみを削除する
- 一致なしの場合、エラーを投げず null を返す
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
QfindOneAndDelete と deleteOne の違いは何ですか?
AdeleteOne() は deletedCount のみを返します。findOneAndDelete() はアーカイブや監査のための完全な削除ドキュメントを返します。
Q一致するものが無い場合、findOneAndDelete は何を返しますか?
Aエラーを投げず null を返すため、フィルタが一致したかどうかを判断できます。
QfindOneAndDelete で返されるフィールドを制限できますか?
Aできます。projection オプションで制限します。例: {projection: {name: 1}} は name のみを返します。