cursor.allowDiskUse()(mongoshメソッド)
定義
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 はエラーを返します。