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

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

戻る

cursor.addOption

項目一覧