cursor.allowDiskUse()
定義
cursor.allowDiskUse()
重要
mongosh メソッド
これは
mongosh
メソッドです。 これは、Node.js
またはその他のプログラミング言語固有のドライバー メソッドのドキュメントではありません。ほとんどの場合、
mongosh
メソッドはレガシーのmongo
shell メソッドと同じように動作します。 ただし、一部のレガシー メソッドはmongosh
では利用できません。レガシー
mongo
shell のドキュメントについては、対応する MongoDB Server リリースのドキュメントを参照してください。MongoDB API ドライバーについては、各言語のMongoDB ドライバードキュメント を参照してください。
allowDiskUse()
を使用すると、ブロッキングソート操作の処理中に MongoDB はディスク上の一時ファイルを使用して、 100メガバイトのシステムメモリ制限を超えるデータを保存できます。 MongoDB100 がブロッキングソート操作に メガバイトを超えるシステム メモリを必要とする場合、クエリが を 指定 し ない限り 、MongoDBcursor.allowDiskUse()
はエラーを返します。allowDiskUse()
の形式は次のとおりです。db.collection.find(<match>).sort(<sort>).allowDiskUse()
ブロッキングソート操作の詳細については、「ソートとインデックスの使用」を参照してください。
動作
インデックスなしの大きなソートのみをサポート
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 はエラーを返します。