allowDiskUse() (ソートでのディスク使用を許可)
最終更新:2026-10-09
allowDiskUse() (ソートでのディスク使用を許可)
allowDiskUse() は、sort() など大きなメモリを要求するブロッキング操作で、カーソルがディスクに溢れ出せるようにします: `db.users.find().sort({ age: -1 }).allowDiskUse()`。デフォルトでは 100MB のメモリ上限を超えるソートはエラーになりますが、このフラグで中間結果が一時ファイルに格納されます。巨大なソートやアグリゲーションをディスク I/O のパフォーマンスコストと引き換えに救います。
| カテゴリ | カーソル |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
db.<collection>.find(<filter>).sort(<sortKey>).allowDiskUse()
戻り値:ディスクへのスピルを有効にしたカーソル(チェーン可能)。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// allowDiskUse: 巨大なソートのディスク溢れを許可する
const result = db.logs.find({ level: 'error' })
.sort({ timestamp: -1 })
.allowDiskUse()
.toArray()
result.length
出力:
1200
📌 注意事項
- ソートあたりのデフォルトのメモリ上限は 100MB。超えるとエラー
- ディスク溢れでは中間結果が一時ファイルに置かれる。遅い
- アグリゲーションパイプラインにも同等の allowDiskUse オプションがある
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
QallowDiskUse はいつ必要ですか?
Aソートやアグリゲーションが 100MB のメモリ上限を超えてエラーになる場合に有効にします。例: 巨大なコレクション全体のソート。
QallowDiskUse はパフォーマンスを損ないますか?
Aはい。ディスク溢れは純粋なメモリ内処理よりはるかに遅いです。インデックスに支えられたソートで回避するのが最善です。
QallowDiskUse はアグリゲーションのオプションと同じですか?
A意味論は同じです。中間結果のディスク溢れ。カーソルメソッドは find().sort() 用、アグリゲーションのオプションは aggregate() 用です。