cursor.allowDiskUse()
定義
cursor.allowDiskUse()
重要
mongosh メソッド
このページでは、
mongosh
メソッドが文書化されます。これは Node.js などの言語固有のドライバーのドキュメントではありません。MongoDB API ドライバーについては、各言語の MongoDB ドライバー ドキュメントを参照してください。
パイプライン ステージが 100 メガバイトの制限を超えた場合、
allowDiskUse()
を使用して、ディスクへの一時ファイルの書込みを許可または禁止します。MongoDB 6.0 以降では、100 MB を超えるメモリを必要とする操作は、デフォルトで自動的に一時ファイルにデータが書込まれます。allowDiskUse()
の形式は次のとおりです。db.collection.find(<match>).sort(<sort>).allowDiskUse()
ブロッキングソート操作の詳細については、「ソートとインデックスの使用」を参照してください。
動作
相互作用: allowDiskUseByDefault
MongoDB 6.0 以降、実行に必要とされるメモリが 100 MB を超えるパイプライン ステージでは、デフォルトで一時ファイルをディスクに書き込みます。
注意
MongoDB 6.0 より前のバージョンでは、.allowDiskUse(false)
と .allowDiskUse(true)
は同じ効果です。MongoDB 6.0 では、mongosh
とレガシー mongo
shell はどちらも次のように動作します。
allowDiskUseByDefault
が true
の場合(これがデフォルト):
.allowDiskUse()
に追加効果はない.allowDiskUse(true)
に追加効果はない.allowDiskUse(false)
はクエリが一時ファイルをディスクに書き込むことを禁止する
allowDiskUseByDefault
が false
の場合:
.allowDiskUse()
ディスクへの一時ファイルの書き込みが可能.allowDiskUse(true)
ディスクへの一時ファイルの書き込みが可能.allowDiskUse(false)
に追加効果はない
インデックスなしの大きなソートのみをサポート
cursor.allowDiskUse()
は、インデックスを使用して応答されるソート操作や、 100 MB 未満のメモリを必要とするインデックスなし(「ブロッキング」)ソート操作には影響しません。 ブロッキングソートとソート インデックスの使用に関する詳細なドキュメントについては、「ソートとインデックスの使用 」を参照してください。
MongoDB がブロッキングソートを実行する必要があるかどうかを確認するには、クエリに cursor.explain()
を追加し、explain の結果を確認します。クエリプランに SORT
ステージが含まれている場合、MongoDB は 100 MB のメモリ制限に従ってブロッキングソート操作を実行する必要があります。
例
_id
のデフォルト インデックスのみを持つコレクション sensors
を考えてみましょう。コレクションには、以下と同様のドキュメントが含まれています。
{ "sensor-name" : "TEMP-21425", "sensor-location" : "Unit 12", "reading" : { "timestamp" : Timestamp(1580247215, 1), "value" : 212, "unit" : "Fahrenheit" } }
次の操作には、フィールドreading.timestamp
にcursor.sort()
が含まれています。 この操作には、ソート操作をサポートするcursor.allowDiskUse()
も含まれています。
db.sensors.find({"sensor-location" : "Unit 12"}). sort({"reading.timestamp" : 1}). allowDiskUse()
reading.timestamp
はインデックスに含まれていないため、MongoDB は要求されたソート順序で結果を返すためにブロッキングソート操作を実行する必要があります。 allowDiskUse()
を指定すると、 100 MB を超えるシステム メモリが必要な場合でも、MongoDB はソート操作を処理できます。 allowDiskUse()
が省略され、操作に100 MB を超えるシステム メモリが必要な場合、MongoDB はエラーを返します。