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()
メモリ内ソート操作の詳細については、「 ソートとインデックスの使用 」を参照してください。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
注意
このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
動作
相互作用: 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" } }
次の操作には、フィールドcursor.sort()
reading.timestamp
に が含まれています。また、操作では をfalse
cursor.allowDiskUse()
に渡して、クエリが一時ファイルをディスクに書き込むことを禁止します。
db.sensors.find({"sensor-location" : "Unit 12"}). sort({"reading.timestamp" : 1}). allowDiskUse(false)
reading.timestamp
はインデックスに含まれていないため、 MongoDB は要求されたソート順序で結果を返すには、メモリ内ソート操作を実行する必要があります。 cursor.allowDiskUse(false)
を指定すると、必要なシステム メモリが 100 MB を超える場合、 MongoDB はソート操作を処理できません。操作に100 MB を超えるシステム メモリが必要な場合、 MongoDB はエラーを返します。