定義
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 メガバイト未満のメモリしか使用しないものには影響しません。インメモリソートとソートインデックスの使用に関する詳細なドキュメントについては、「ソートとインデックスの使用」を参照してください。
MongoDB がインメモリソートを実行する必要があるかを確認するには、クエリに cursor.explain() を追加し、explain の結果 を確認します。クエリプランに SORT ステージが含まれている場合、MongoDB は 100 メガバイトのメモリ制限の下でインメモリソートを実行する必要があります。
例
_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() に false を渡すことで、クエリが一時ファイルをディスクに書き込むのを禁止しています。
db.sensors.find({"sensor-location" : "Unit 12"}). sort({"reading.timestamp" : 1}). allowDiskUse(false)
reading.timestampがインデックスに含まれていないため、MongoDBは要求された並べ替え順序で結果を返すためにメモリ内でソート操作を実行する必要があります。cursor.allowDiskUse(false) を指定すると、MongoDB はソート操作に 100 メガバイトを超えるシステムメモリが必要な場合、そのソート処理を実行できなくなります。操作に 100 メガバイトを超えるシステムメモリが必要な場合、MongoDB はエラーを返します。