集計パイプラインの制限
aggregate
コマンドを使用した集計操作には次の制限があります。
結果サイズの制限
aggregate
コマンドは、カーソルを返すか、結果をコレクションにストアできます。結果セット内の各ドキュメントには、16 メガバイトの BSON ドキュメント サイズ制限が適用されます。いずれかのドキュメントが BSON ドキュメント サイズの制限を超えると、集計でエラーが発生します。この制限は、戻されたドキュメントにのみ適用されます。パイプライン処理中に、ドキュメントがこのサイズを超える場合があります。db.collection.aggregate()
メソッドはデフォルトでカーソルを返します。
ステージ数の制限
MongoDBは、単一のパイプラインで許可される集計パイプラインステージの数を 1000 に制限します。
集計パイプラインが解析される前または解析された後に ステージの制限を超えると、エラーが発生します。
メモリ制限
MongoDB 6.0 以降のバージョンでは、実行に 100 MB を超えるメモリを必要とするパイプライン ステージが、デフォルトで一時ファイルをディスクに書き込むかどうかをallowDiskUseByDefault
パラメーターが制御します。
allowDiskUseByDefault
がtrue
に設定されている場合、実行に 100 MB を超えるメモリを必要とするパイプライン ステージは、デフォルトで一時ファイルをディスクに書き込みます。{ allowDiskUse: false }
オプションを使用して、特定のfind
またはaggregate
コマンドの一時ファイルのディスクへの書き込みを無効にすることができます。allowDiskUseByDefault
がfalse
に設定されている場合、実行に 100 MB を超えるメモリを必要とするパイプライン ステージでは、デフォルトでエラーが発生します。{ allowDiskUse: true }
オプションを使用して、特定のfind
またはaggregate
の一時ファイルのディスクへの書き込みを有効にすることができます。
$search
集計ステージは別のプロセスで実行されるため、 100 MB の RAM に制限されません。
allowDiskUse が true
の場合に一時ファイルをディスクに書き込むことができるステージの例は次のとおりです。
$sort
ソート操作がインデックスでサポートされていない場合
注意
パイプライン ステージはドキュメントのストリームに対して動作し、各パイプライン ステージはドキュメントを取り込んで処理し、その結果となるドキュメントを出力します。
一部のステージでは、受信したドキュメントをすべて処理するまでドキュメントを出力できません。これらのパイプライン ステージは、すべての受信ドキュメントが処理されるまで、ステージ出力を RAM に保持する必要があります。その結果、これらのパイプライン ステージでは 100 MB の制限を超えるスペースが必要になる場合があります。
$sort
パイプライン ステージのいずれかの結果が制限を超える場合は、$limit ステージの追加を検討してください。
プロファイラーのログ メッセージと診断ログ メッセージには、メモリの制限により集計ステージが一時ファイルにデータが書き込まれた場合、usedDisk
インジケーターが含められます。