Limites de Pipeline de Agregação
Operações de agregação com o comando aggregate
têm as seguintes limitações.
Restrições de tamanho de resultado
O comando aggregate
pode retornar um cursor ou armazenar os resultados em uma coleta. Cada documento no conjunto de resultados está sujeito ao limite de tamanho de documento JSON de 16 megabytes. Se qualquer documento exceder o limite de Tamanho de Documento JSON, a agregação produz um erro. O limite aplica-se apenas aos documentos devolvidos. Durante o processamento do pipeline, os documentos podem exceder esse tamanho. O método db.collection.aggregate()
retorna um cursor por padrão.
Restrições do número de estágios
O MongoDB limita o número de fases do pipeline de agregação permitidos em um único pipeline a 1000.
Se um pipeline de agregação exceder o limite de estágio antes ou depois de ser analisado, você receberá um erro.
Restrições de memória
A partir do MongoDB 6.0, o parâmetro allowDiskUseByDefault
controla se os estágios do pipeline que exigem mais de 100 megabytes de memória para execução de arquivos de escrita temporários no disco por padrão.
Se
allowDiskUseByDefault
for definido comotrue
, os estágios do pipeline que exigem mais de 100 megabytes de memória para serem executados gravam arquivos temporários no disco por padrão. Você pode desabilitar a gravação de arquivos temporários em disco para comandosfind
ouaggregate
específicos usando a opção{ allowDiskUse: false }
.Se
allowDiskUseByDefault
for definido comofalse
, os estágios do pipeline que exigem mais de 100 megabytes de memória para serem executados geram um erro por padrão. Você pode ativar a gravação de arquivos temporários em disco parafind
ouaggregate
específicos usando a opção{ allowDiskUse: true }
.
O estágio de agregação $search
não está restrito a 100 megabytes de RAM porque é executado em um processo separado.
Exemplos de estágios que podem escrever arquivos temporários no disco quando o allowDiskUse é true
são:
$sort
quando a operação de classificação não é suportada por um índice
Observação
Os estágios de pipeline operam em fluxos de documentos, em que cada estágio de pipeline recebe documentos, processa-os e, em seguida, gera os documentos resultantes.
Alguns estágios podem não gerar documentos até que tenham processado todos os documentos recebidos. Esses estágios do pipeline devem armazenar os resultados na memória RAM até que todos os documentos recebidos sejam processados. Como resultado, estes estágios do pipeline podem exigir mais espaço do que o limite de 100 MB.
Se os resultados de um dos seus $sort
estágios do pipeline excederem o limite, considere adicionar um estágio $limit.
As mensagens de registro do criador de perfil e as mensagens de registro de diagnóstico incluem um indicador usedDisk
se algum estágio de agregação gravou dados em arquivos temporários devido a restrições de memória.