AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

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

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 メガバイト未満のメモリしか使用しないものには影響しません。インメモリソートとソートインデックスの使用に関する詳細なドキュメントについては、「ソートとインデックスの使用」を参照してください。

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