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