Docs Menu
Docs Home
/
データベース マニュアル
/ / /

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"
}
}

次の操作には、フィールドcursor.sort() reading.timestampに が含まれています。また、操作では をfalse cursor.allowDiskUse()に渡して、クエリが一時ファイルをディスクに書き込むことを禁止します。

db.sensors.find({"sensor-location" : "Unit 12"}).
sort({"reading.timestamp" : 1}).
allowDiskUse(false)

reading.timestamp はインデックスに含まれていないため、 MongoDB は要求されたソート順序で結果を返すには、メモリ内ソート操作を実行する必要があります。 cursor.allowDiskUse(false)を指定すると、必要なシステム メモリが 100 MB を超える場合、 MongoDB はソート操作を処理できません。操作に100 MB を超えるシステム メモリが必要な場合、 MongoDB はエラーを返します。

戻る

cursor.addOption

項目一覧