ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Docs Menu

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