Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

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 のバージョン

MongoDB 6.0 以降、実行に必要とされるメモリが 100 MB を超えるパイプライン ステージでは、デフォルトで一時ファイルをディスクに書き込みます。

注意

MongoDB 6.0 より前のバージョンでは、.allowDiskUse(false).allowDiskUse(true) は同じ効果です。MongoDB 6.0 では、mongosh とレガシー mongo shell はどちらも次のように動作します。

allowDiskUseByDefaulttrue の場合(これがデフォルト):

  • .allowDiskUse() に追加効果はない

  • .allowDiskUse(true) に追加効果はない

  • .allowDiskUse(false) はクエリが一時ファイルをディスクに書き込むことを禁止する

allowDiskUseByDefaultfalse の場合:

  • .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.timestampcursor.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 はエラーを返します。

戻る

cursor.addOption