noCursorTimeout() (カーソルのタイムアウト無効化)
最終更新:2026-10-09
noCursorTimeout() (カーソルのタイムアウト無効化)
noCursorTimeout() はカーソルのサーバー側アイドルタイムアウトを無効にします: `db.users.find().noCursorTimeout()`。デフォルトでは10分を超えてアイドルなカーソルは回収されますが、このフラグがあればカーソルを長く生存させられます。大きなバッチを遅く消費する処理に便利です。警告: 長時間生存するカーソルはサーバーリソースを保持するため、終わったら close() で手動クローズしてリークを避けてください。
| カテゴリ | カーソル |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
db.<collection>.find(<filter>).noCursorTimeout()
戻り値:タイムアウトを無効にしたカーソル(チェーン可能)。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// noCursorTimeout: 巨大なコレクションの長時間走査
const cursor = db.logs.find().noCursorTimeout().batchSize(100)
cursor.forEach(doc => processDoc(doc))
cursor.close()
出力:
(反復完了、出力なし)
📌 注意事項
- デフォルトのアイドルタイムアウトは10分。noCursorTimeout() で解除される
- 長時間生存するカーソルはサーバーメモリを保持する。必ず close() する
- batchSize() と組み合わせてバッチサイズを制御する
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Qカーソルのデフォルトのタイムアウトは?
Aサーバーはアイドルカーソルを10分後に回収します。noCursorTimeout() はそれを無効にします。
QnoCursorTimeout で気を付けることは?
A終了時または早期退出時に必ず close() を呼びます。呼ばないとサーバーリソースがリークします。
QnoCursorTimeout はいつ必要ですか?
A1カーソルあたり10分を超える可能性のある遅いバッチジョブ。例: 数百万件のドキュメントを1件ずつクリーンアップする場合。