Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/

Limites e limiares do MongoDB

Nesta página

  • Limitações do Atlas do MongoDB
  • Documentos BSON
  • Restrições de nomeação
  • Avisos de nomenclatura
  • Namespaces
  • Indexes
  • Tipos
  • Dados
  • Conjuntos de réplicas
  • Clusters fragmentados
  • operações
  • Sessões

Este documento fornece uma collection de limitações rígidas e flexíveis do sistema MongoDB. As limitações nesta página se aplicam a sistemas hospedados em todos os ambientes a seguir, a menos que especificado de outra forma:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem

  • MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB

As limitações a seguir se aplicam apenas a implantações hospedadas no MongoDB Atlas. Se algum desses limites apresentar um problema para sua organização, entre em contato com o suporte do Atlas.

Componente
Limite
12
Shards em clusters de uma região
50
Permissões de rede entre regiões para um cluster multirregional
40. Além disso, um cluster em qualquer projeto abrange mais de 40 regiões; não é possível criar um cluster multirregional nesse projeto.
Nós elegíveis por conjunto de réplicas ou shard
7
M30

O MongoDB Atlas limita as conexões concomitantes de entrada com base na camada e na classe do cluster. Os limites de conexão do MongoDB Atlas se aplicam por nó. Para clusters fragmentados, os limites de conexão do MongoDB Atlas se aplicam por roteador mongos. O número de roteadores mongos é igual ao número de nós do conjunto de réplicas em todos os fragmentos.

Sua preferência de leitura também contribui para o número total de conexões que o MongoDB Atlas pode alocar para uma determinada query.

O MongoDB Atlas tem os seguintes limites de conexão para as camadas do cluster especificado:

MongoDB Atlas Cluster Tier
Máximo de conexões por nó
M0
500
M2
500
M5
500
M10
1500
M20
3000
M30
3000
M40
6000
M50
16000
M60
32000
M80
96000
M140
96000
M200
128000
M300
128000
MongoDB Atlas Cluster Tier
Máximo de conexões por nó
M40
4000
M50
16000
M60
32000
M80
64000
M140
96000
M200
128000
M300
128000
M400
128000
M700
128000
MongoDB Atlas Cluster Tier
Máximo de conexões por nó
M0
500
M2
500
M5
500
M10
1500
M20
3000
M30
3000
M40
6000
M50
16000
M60
32000
M80
64000
M140
96000
M200
128000
M300
128000

Observação

O MongoDB Atlas reserva um pequeno número de conexões para cada cluster a fim de dar suporte a seus próprios serviços.

Se você estiver se conectando a uma implantação MongoDB Atlas multinuvem por meio de uma conexão privada, poderá acessar apenas os nós no mesmo fornecedor de serviços em nuvem do qual está se conectando. Esse fornecedor de serviços em nuvem pode não ter o nó primário em sua região. Quando isso acontece, você deve especificar o modo de preferência de leitura secundário na string de conexão para acessar a implantação.

Se você precisar de acesso a todos os nós para o seu sistema MongoDB Atlas multi-nuvem do seu provedor atual por meio de uma conexão privada, deverá executar uma das seguintes ações:

  • Configurar uma VPN para cada fornecedor restante.

  • Configure um ponto de extremidade privado para o MongoDB Atlas para cada um dos provedores restantes.

Embora não haja um limite rígido para o número de collections em um cluster do MongoDB Atlas, o desempenho do cluster pode se degradar se ele servir um grande número de collections e índices. Collections maiores têm impacto maior no desempenho.

O número máximo combinado recomendado de collections e índices por camada do MongoDB Atlas cluster é o seguinte:

MongoDB Atlas Cluster Tier
Máximo recomendado
M10
5.000 collections e índices
M20 / M30
10.000 collections e índices
M40/+
100.000 collections e índices

As implantações do MongoDB Atlas possuem os seguintes limites de organização e projeto:

Componente
Limite
Usuários de banco de dados por MongoDB Atlas
100
Usuários do Atlas por projeto do MongoDB Atlas
500
Usuários do Atlas por organização do MongoDB Atlas
500
Chaves API por organização do MongoDB Atlas
500
200
Usuários por equipe do MongoDB Atlas
250
Equipes por projeto do MongoDB Atlas
100
Equipes por organização do MongoDB Atlas
250
Equipes por usuário do MongoDB Atlas
100
Organizações por Atlas user do MongoDB
250
Organizações vinculadas por usuário do MongoDB Atlas
50
Clusters por projeto do MongoDB Atlas
25
Projetos por organização do MongoDB Atlas
250
Funções personalizadas do MongoDB por projeto do MongoDB Atlas
100
Roles atribuídos por usuário do banco de dados
100
Cobrança por hora por organização MongoDB Atlas
$50
Instâncias de banco de dados federadas por projeto do MongoDB Atlas
25
Total de conexões de peering de rede por projeto do MongoDB Atlas
50. Além disso, o MongoDB Atlas limita o número de nós por conexão de peering de rede com base no bloco CIDR e na região selecionada para o projeto.
Conexões de peering de rede pendentes por projeto do MongoDB Atlas
25
Alvos endereçáveis do AWS Private Link por região
50
Alvos endereçáveis do Azure PrivateLink por região
150
Chaves de fragmento exclusivas por projeto de cluster global gerenciado pelo Atlas do MongoDB
40. Isso se aplica somente a Clusters Globais com fragmentação gerenciada pelo Atlas. Não há limites para o número de chaves de fragmento exclusivas por projeto para clusters globais com fragmentação autogerenciada.
Pipelines do Atlas Data Lake por projeto do MongoDB Atlas
25
M0 clusters por projeto do MongoDB Atlas
1

As contas de serviço do MongoDB Atlas têm os seguintes limites de organização e projeto:

Componente
Limite
Contas de serviço do Atlas por organização do MongoDB Atlas
200
Acesso de entradas de lista por conta de serviço do MongoDB Atlas
200
Segredos por conta de serviço do MongoDB Atlas
2
Tokens ativos por conta de serviço do MongoDB Atlas
100

O MongoDB Atlas limita o comprimento e força os requisitos do ReGex para as seguintes etiquetas de componentes:

Componente
Limite de caracteres
Padrão RegEx
Nome do cluster
64 [1]
^([a-zA-Z0-9]([a-zA-Z0-9-]){0,21}(?<!-)([\w]{0,42}))$ [2]
Nome do projeto
64
^[\p{L}\p{N}\-_.(),:&@+']{1,64}$ [3]
Nome da organização
64
^[\p{L}\p{N}\-_.(),:&@+']{1,64}$ [3]
Descrição da Chave API
250
[1] Se você tiver o modo somente de peering habilitado, o limite de caracteres do nome do cluster será 23.
[2] O MongoDB Atlas utiliza os primeiros 23 caracteres do nome de um cluster. Esses caracteres devem ser exclusivos dentro do projeto do cluster. Os nomes de clusters com menos de 23 caracteres não podem terminar com um hífen (-). Nomes de clusters com mais de 23 caracteres não podem ter um hífen como o 23º caractere.
[3](1, 2) Os nomes da organização e do projeto podem incluir qualquer letra ou número Unicode, além da seguinte pontuação: -_.(),:&@+'.

Limitações adicionais se aplicam às instâncias sem servidor do MongoDB Atlas, aos clusters gratuitos e aos clusters fragmentados. Para saber mais, consulte os seguintes recursos:

Alguns comandos do MongoDB não são suportados no MongoDB Atlas. Adicionalmente, alguns comandos são suportados somente em clusters gratuitos do MongoDB Atlas. Para saber mais, consulte os seguintes recursos:

Tamanho do documento BSON

O tamanho máximo do documento BSON é de 16 megabytes.

O tamanho máximo do documento ajuda a garantir que este não possa usar uma quantidade excessiva de RAM ou, durante a transmissão, uma quantidade excessiva de largura de banda. Para armazenar documentos maiores do que o tamanho máximo, o MongoDB fornece a API GridFS. Para obter mais informações sobre o GridFS, consulte mongofiles e a documentação do seu driver.

Profundidade aninhada para documentos BSON

O MongoDB permite no máximo 100 níveis de aninhamento para documentos BSON. Cada objeto ou array adiciona um nível.

Uso de letras maiúsculas e minúsculas em nomes de banco de dados

Não use maiúsculas e minúsculas para distinguir entre bancos de dados. Por exemplo, você não pode usar dois bancos de dados com nomes como salesData e SalesData.

Depois de criar um banco de dados no MongoDB, você deve usar a capitalização consistente quando se referir a ele. Por exemplo, se você criar o banco de dados salesData, não faça referência a ele usando letras maiúsculas alternativas, como salesdata ou SalesData.

Restrições em nomes de bancos de dados para Windows

Para implantações do MongoDB executadas no Windows, os nomes dos bancos de dados não podem conter nenhum dos seguintes caracteres:

/\. "$*<>:|?

Os nomes do banco de dados também não podem conter o caractere nulo.

Restrições em nomes de bancos de dados para sistemas Unix e Linux

Para implantações do MongoDB executadas em sistemas Unix e Linux, os nomes dos bancos de dados não podem conter nenhum dos seguintes caracteres:

/\. "$

Os nomes do banco de dados também não podem conter o caractere nulo.

Comprimento dos nomes dos bancos de dados

Os nomes do banco de dados não podem estar vazios e devem ter menos de 64 caracteres.

Restrição de nomes de coleções

Os nomes das collections devem começar com um sublinhado ou um caractere de letra, e não podem:

  • contém o $.

  • seja uma string vazia (por exemplo. "").

  • contém o caractere nulo.

  • começar com o prefixo system.. (Reservado para uso interno.)

  • contém .system..

Se o nome da coleção incluir caracteres especiais, como o underscore, ou começar com números, para acessar a coleção use o método db.getCollection() em mongosh ou um método semelhante para o driver.

Comprimento do namespace:

Para featureCompatibilityVersion definido como "4.4" ou superior, o MongoDB aumenta o limite do namespace de coleta/visualização para 255 bytes. Para uma coleção ou visualização, o espaço de nomes inclui o nome do banco de dados, o separador do ponto (.) e o nome da coleção/visualização (por exemplo <database>.<collection>),

Restrições em nomes de campo
  • Os nomes de campo não podem conter o caractere null.

  • O servidor permite armazenar nomes de campos que contêm pontos (.) e sinais de dólar ($).

  • MongodB 5.0 adiciona suporte melhorado para o uso de ($) e (.) em nomes de campo. Existem algumas restrições. Consulte Considerações sobre o nome do campo para obter mais detalhes.

Restrições em _id

O nome do campo _id é reservado para uso como chave primária; seu valor deve ser exclusivo na coleção, é imutável e pode ser de qualquer tipo que não seja uma array ou regex. Se o _id contiver subcampos, os nomes dos subcampos não poderão começar com um símbolo ($).

Aviso

Tenha cuidado, pois os problemas discutidos nesta seção podem levar à perda ou corrupção de dados.

A linguagem de query do MongoDB não oferece suporte a documentos com nomes de campo duplicados. Embora alguns construtores BSON possam suportar a criação de um documento BSON com nomes de campo duplicados, a inserção desses documentos no MongoDB não é suportada mesmo que a inserção seja bem-sucedida ou pareça ser bem-sucedida. Por exemplo, inserir um documento BSON com nomes de campo duplicados por meio de um driver MongoDB pode resultar na liberação silenciosa dos valores duplicados antes da inserção, ou pode resultar na inserção de um documento inválido que contenha campos duplicados. A consulta a qualquer um desses documentos levaria a resultados arbitrários e inconsistentes.

A partir do MongoDB 5.0, os nomes dos campos do documento podem ter prefixo de cifrão ($) e podem conter pontos (.). No entanto, mongoimport e mongoexport podem não funcionar como esperado em algumas situações com nomes de campo que fazem uso destes caracteres.

O JSON estendido v2 MongoDB não consegue diferenciar entre os wrappers de tipo e os campos que têm o mesmo nome dos wrappers de tipo. Não use formatos JSON estendidos em contextos onde as representações BSON correspondentes possam incluir chaves prefixadas com cifrões ($). O mecanismo DBRef é uma exceção a esta regra geral.

Também há restrições quanto ao uso de mongoimport e mongoexport com pontos (.) em nomes de campos. Como os arquivos CSV usam o ponto (.) para representar hierarquias de dados, um ponto (.) em um nome de campo será interpretado incorretamente como um nível de aninhamento.

Há uma pequena chance de perda de dados ao usar nomes de campo com prefixo de cifrão ($) ou nomes de campo que contenham pontos (.) se esses nomes de campo forem usados em conjunto com gravações não reconhecidas de (write concern w=0) em servidores mais antigos que o MongoDB 5.0.

Ao executar os comandos insert, update e findAndModify , os drivers compatíveis com o 5.0 removem restrições ao uso de documentos com nomes de campos que são prefixados em dólar ($) ou que contêm pontos (.). Esses nomes de campo geraram um erro do lado do cliente nas versões anteriores do driver.

As restrições são removidas independentemente da versão do servidor à qual o driver está conectado. Se um driver do 5.0 enviar um documento para um servidor mais antigo, o documento será rejeitado sem enviar um erro.

Comprimento do namespace

Para featureCompatibilityVersion definido como "4.4" ou superior, o MongoDB aumenta o limite do namespace de coleta/visualização para 255 bytes. Para uma coleção ou visualização, o espaço de nomes inclui o nome do banco de dados, o separador do ponto (.) e o nome da coleção/visualização (por exemplo <database>.<collection>),

Dica

Veja também:

Número de índices por collection

Uma única collection não pode ter mais de 64 índices.

Número de campos indexados em um índice composto

Não pode haver mais de 32 campos em um índice composto.

As queries não podem usar índices geoespaciais e de texto

Você não pode combinar a query $text, que exige um índice de texto especial, com um operador de query que exige um tipo diferente de índice especial. Por exemplo, você não pode combinar a query $text com o operador $near.

Campos com índices 2dsphere só podem conter geometrias

Campos com índices 2dsphere devem conter dados de geometria na forma de pares de coordenadas ou dados GeoJSON . Se você tentar inserir um documento com dados não geométricos em um campo indexado do 2dsphere ou construir um índice do 2dsphere em uma construir onde o campo indexado tem dados não geométricos, a operação falhará.

Dica

Veja também:

O limite exclusivo de índices nas restrições operacionais de fragmentação.

Os valores NaN retornados de Queries Cobertas pelo mecanismo de armazenamento do WiredTiger são sempre de tipo double

Se o valor de um campo retornado de uma query coberta por um índice for NaN, o tipo desse valor NaN será sempre double.

Multikey Index

Os índices de múltiplas chaves não podem realizar query coberta no(s) campo(s) da array.

Índice Geoespacial

Os índices geoespaciais não podem cobrir uma query.

Uso de memória em compilações de índice

O createIndexes permite criar um ou mais índices em uma coleção. createIndexes usa uma combinação de memória e arquivos temporários no disco para concluir as compilações de índices. O limite padrão de uso de memória para createIndexes é de 200 megabytes, compartilhados entre todos os índices criados usando um único comando createIndexes. Após o limite de memória ser alcançado, o createIndexes utiliza arquivos de disco temporários em um subdiretório denominado _tmp dentro do diretório --dbpath para concluir a compilação.

Você pode substituir o limite de memória configurando o parâmetro do servidor maxIndexBuildMemoryUsageMegabytes. A definição de um limite de memória maior pode resultar na conclusão mais rápida das compilações de índices. No entanto, um limite muito alto em relação à RAM não utilizada no seu sistema pode resultar no esgotamento da memória e no desligamento do servidor.

As compilações de índice podem ser iniciadas por um comando de usuário , como Criar Índice , ou por um processo administrativo, como uma sincronização inicial. Ambos estão sujeitos ao limite definido por maxIndexBuildMemoryUsageMegabytes.

Uma sincronização inicial preenche apenas uma collection de cada vez e não tem risco de exceder o limite de memória. No entanto, é possível para um usuário iniciar construções de índice em várias collection em vários reconhecimento de data center simultaneamente e potencialmente consumir uma quantidade de memória maior do que o limite definido em maxIndexBuildMemoryUsageMegabytes.

Dica

Para minimizar o impacto da criação de um índice em conjunto de réplicas e clusters fragmentados com fragmentos de conjuntos de réplicas, use um procedimento de compilação de índice contínuo, conforme descrito em Rolling Index Builds on Replica Sets.

Tipos de agrupamento e índice

Os tipos de índice a seguir oferecem suporte apenas à comparação binária simples e não oferecem suporte ao agrupamento:

Dica

Para criar um índice text, 2d ou um índice geoHaystack em uma collection que tem um agrupamento não simples, você deve especificar explicitamente {collation: {locale: "simple"} } ao criar o índice.

Hidden Indexes
Número máximo de chaves de classificação
  • Você pode ordenar o máximo de 32 chaves.

  • Fornecer um padrão de classificação com campos duplicados causa um erro.

Número máximo de documentos em uma capped collection

Se você especificar um número máximo de documentos para uma capped collection usando o parâmetro max para create, o limite deverá ser menor que 2 32 documentos. Se você não especificar um número máximo de documentos ao criar uma collection limitada, não haverá limite para o número de documentos.

Número de membros de um conjunto de réplicas

Os conjuntos de réplica podem ter até 50 membros.

Número de membros votantes de um conjunto de réplicas

Os conjuntos de réplicas podem ter até 7 membros votantes. Para conjuntos de réplicas com mais de 7 membros, consulte Membros não votantes.

Tamanho máximo do Oplog criado automaticamente

Se você não especificar explicitamente um tamanho de oplog (ou seja, com oplogSizeMB ou --oplogSize), o MongoDB criará um oplog que não seja maior que 50 gigabytes. [4]

[4] O oplog pode ultrapassar seu limite de tamanho configurado para evitar a exclusão do majority commit point.

Os clusters fragmentados têm as restrições e limites descritos aqui.

Operações indisponíveis em ambientes compartilhados

$where não permite referências ao objeto db da função $where. Isso é incomum em collections não fragmentadas.

O comando geoSearch não é suportado em ambientes fragmentados.

No MongoDB 5.0 e versões anteriores, você não pode especificar coleções fragmentadas no parâmetro from dos estágios $lookup.

Queries cobertas em clusters fragmentados

Ao executar no mongos, os índices só podem cobrir queries em collections fragmentadas e o índice contiver a chave de shard.

Fragmentando o tamanho dos dados de collection existente

Uma collection existente só pode ser fragmentada se seu tamanho não exceder limites específicos. Esses limites podem ser estimados com base no tamanho médio de todos os valores de chave de fragmento e no tamanho do chunk configurado.

Importante

Esses limites se aplicam somente à operação inicial de fragmentação. As coleções fragmentadas podem crescer para qualquer tamanho depois de ativar a fragmentação.

O MongoDB distribui documentos na collection para que cada chunk esteja meio cheio na criação. Use as seguintes fórmulas para calcular o tamanho máximo teórico da coleção.

maxSplits = 16777216 (bytes) / <average size of shard key values in bytes>
maxCollectionSize (MB) = maxSplits * (chunkSize / 2)

Observação

O tamanho máximo do documento BSON é 16MB ou 16777216 bytes.

Todas as conversões devem usar a escala base2 , por exemplo 1024 kilobytes = 1 megabyte.

Se maxCollectionSize for menor ou quase igual à collection de destino, aumente o tamanho do chunk para garantir o sucesso da fragmentação inicial. Se houver dúvidas se o resultado do cálculo está muito "próximo" do tamanho de destino da collection, provavelmente é melhor aumentar o tamanho do chunk.

Após a fragmentação inicial bem-sucedida, você poderá reduzir o tamanho do chunk conforme necessário. Se posteriormente você reduzir o tamanho do bloco, pode levar algum tempo para que todos os blocos sejam divididos para o novo tamanho. Consulte Modificar o Tamanho do Chunk em um Cluster Fragmentado para obter instruções sobre como modificar o tamanho do chunk.

Esta tabela ilustra os tamanhos máximos aproximados de collection usando as fórmulas descritas acima:

Tamanho médio dos valores da chave de shard
512 bytes
256 bytes
128 bytes
64 bytes
Número máximo de divisões
32,768
65,536
131,072
262,144
Tamanho máximo da coleção (tamanho do bloco de 64 MB)
1 TB
2 TB
4 TB
8 TB
Tamanho máximo da coleção (tamanho do bloco de 128 MB)
2 TB
4 TB
8 TB
16 TB
Tamanho máximo da coleção (tamanho do bloco de 256 MB)
4 TB
8 TB
16 TB
32 TB
Operações de Modificação de Documentos Únicos em Coleções Compartilhadas

Para usar operações update e remove() para uma coleção fragmentada que especifique a opção justOne ou multi: false:

  • Se você segmentar apenas um fragmento, poderá usar uma chave de fragmento parcial na especificação da consulta ou,

  • Você pode fornecer a chave de estilhaço ou o campo _id na especificação de consulta.

Índices exclusivos em coleções fragmentadas

O MongoDB não oferece suporte a índices exclusivos entre shards, exceto quando o índice exclusivo contém a chave completa do shard como um prefixo do índice. Nessas situações, o MongoDB reforçará a exclusividade em toda a chave, não em um único campo.

Dica

Consulte:

Restrições únicas em campos arbitrários para uma abordagem alternativa.

Número máximo de documento por parte para migração

Por padrão, o MongoDB não poderá mover um chunk se o número de documentos no chunk for maior que 1.3 vezes o resultado da divisão do tamanho do chunk configurado pelo tamanho médio do documento. db.collection.stats() inclui o campo avgObjSize , que representa o tamanho médio do documento na coleção.

Para blocos muito grandes para serem migrados, a partir do MongoDB 4.4:

  • Uma nova configuração de balanceador attemptToBalanceJumboChunks permite que o balanceador migre os blocos grandes demais para serem movidos, desde que os blocos não sejam rotulados como jumbo. Consulte Balancear Blocos que Excedem o Limite de Tamanho para obter detalhes.

  • O comando moveChunk pode especificar uma nova opção forceJumbo para permitir a migração de partes que são muito grandes para serem movidas. As partes podem ser rotuladas de jumbo ou não.

Tipo de índice de chave de shard

Um índice de chave de fragmento pode ser um índice ascendente na chave de fragmento, um índice composto que começa com a chave de fragmento e especifica a ordem ascendente para a chave de fragmento ou um índice com hash.

Um índice de chave de fragmento não pode ser:

Seleção de chave de shard

Suas opções para alterar uma chave de shard dependem da versão do MongoDB que você está executando:

O aumento monotônico das chaves de shard pode limitar a taxa de transferência da inserção

Para clusters com altos volumes de inserção, uma chave de shard com chaves crescentes e decrescentes monotonicamente pode afetar a taxa de transferência da inserção. Se a chave de shard for o campo _id, esteja ciente de que os valores padrão dos campos _id são ObjectIds que geralmente têm valores crescentes.

Ao inserir documentos com chaves de shard crescentes monotonicamente, todas as inserções pertencem ao mesmo chunk em um único shard. O sistema eventualmente divide a faixa de chunk que recebe todas as operações de gravação e migra seu conteúdo para distribuir dados de forma mais uniforme. No entanto, a qualquer momento o cluster direciona as operações de inserção apenas para um único shard, o que cria um afunilamento na taxa de transferência de inserção.

Se as operações no cluster forem principalmente operações de leitura e atualizações, essa limitação poderá não afetar o cluster.

Para evitar essa restrição, use uma hashed shard key ou selecione um campo que não aumente ou diminua monotonicamente.

As chaves de shard e os índices de hash armazenam hashes de valores de chaves em ordem ascendente.

Operações de classificação

Se o MongoDB não puder usar um índice ou índices para obter a ordem de classificação, o MongoDB deverá executar uma operação de ordenador bloqueante nos dados. O nome refere-se ao requisito de que o estágio SORT leia todos os documentos de entrada antes de retornar documentos de saída, bloqueando o fluxo de dados para essa query específica.

Se o MongoDB exigir o uso de mais de 100 megabytes de memória do sistema para a operação de block sort, o MongoDB retornará um erro a menos que a query especifique cursor.allowDiskUse(). allowDiskUse() permite que o MongoDB use arquivos temporários no disco para armazenar dados que excedam o limite de memória do sistema de 100 megabytes ao processar uma ordenador bloqueante.

Para obter mais informações sobre classificações e uso de índices, consulte Uso de classificação e índice.

Estágios do pipeline de agregação

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.

Memória do pipeline de agregação

Cada estágio individual do pipeline tem um limite de 100 megabytes de RAM. Por padrão, se um estágio exceder esse limite, o MongoDB produz um erro. For some pipeline stages you can allow pipeline processing to take up more space by using the allowDiskUse option to enable aggregation pipeline stages to write data to temporary files.

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 ser transferidos para o disco quando allowDiskUse é true são:

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.

Aggregation e read concern
Queries geoespaciais 2D não podem usar o operador $or
Consultas geoespaciais

Para query esféricas, utilize o resultado do índice 2dsphere .

O uso do índice 2d para query esféricas pode levar a resultados incorretos, como o uso do índice 2d para query esféricas que envolvem os pólos.

Coordenadas geoespaciais
  • Os valores de longitude válidos estão entre -180 e 180, ambos inclusos.

  • Os valores de latitude válidos estão entre -90 e 90, ambos inclusos.

Área de Polígonos GeoJSON

Para $geoIntersects ou $geoWithin, se você especificar um polígono de anel único que tenha uma área maior que um único hemisfério, inclua a expressão the custom MongoDB coordinate reference system in the $geometry ; caso contrário, $geoIntersects ou $geoWithin query a geometria complementar. Para todos os outros polígono GeoJSON com áreas maiores que um hemisfério, $geoIntersects ou $geoWithin query a geometria complementar.

Transações multidocumento

Para transações com vários documentos:

  • Você pode criar coleções e índices em transações. Para obter detalhes, consulte Crie coleções e índices em uma transação

  • A coletas utilizadas em uma transação podem estar em diferentes bancos de dados.

    Observação

    Você não pode criar uma nova coleta em transações de gravação entre fragmentos. Por exemplo, se você gravar em uma coleta existente em um fragmento e criar implicitamente uma coleta em um fragmento diferente, o MongoDB não poderá executar ambas as operações na mesma transação.

  • Você não pode gravar em coletas limitadas .

  • Não é possível usar read concern "snapshot" ao ler em uma capped collection. (A partir do MongoDB 5.0)

  • Você não pode ler/gravar em coletas nos bancos de dados config, admin ou local.

  • Você não pode gravar na coleção system.*.

  • Não é possível retornar o plano de query da operação compatível utilizando explain ou comandos semelhantes.

  • Para cursores criados fora de uma transação, você não pode chamar getMore dentro da transação.

  • Para cursores criados em uma transação, não é possível chamar getMore fora da transação.

  • Você não pode especificar o comando como a primeira operação em killCursors uma transação.

    Além disso, se você executar o comando killCursors em uma transação, o servidor interromperá imediatamente os cursores especificados. Não espera que a transação seja confirmada.

As seguintes operações não são permitidas nas transações:

As transações têm um limite de vida útil, conforme especificado por transactionLifetimeLimitSeconds. O padrão é 60 segundos.

Tamanho limite do lote de comandos de gravação

100,000 escritas são permitidas em uma única operação em lote, definida por uma única solicitação ao servidor.

As operações Bulk() no mongosh e métodos comparáveis nos drivers não têm esse limite.

Visualizações

A definição de visualização pipeline não pode incluir o estágio $out ou $merge . Se a definição de visualização incluir o pipeline aninhado (por exemplo, a definição de visualização incluir o estágio $lookup ou $facet ), essa restrição também se aplicará aos pipelines aninhados.

As visualizações têm as seguintes restrições de operação:

Restrições de projeção
$- Restrição de caminho do campo prefixado
A projeção find() e findAndModify() não pode projetar um campo que comece com $ com exceção dos campos DBRef.Por exemplo, a seguinte operação é inválida:
db.inventory.find( {}, { "$instock.warehouse": 0, "$item": 0, "detail.$price": 1 } )
$ Restrição de colocação do operador posicional
O operador de projeção $ só pode aparecer no final do caminho do campo, por exemplo "field.$" ou "fieldA.fieldB.$". Por exemplo, a seguinte operação é inválida:
db.inventory.find( { }, { "instock.$.qty": 1 } )
Para resolver, remova o componente do caminho do campo que segue o operador de projeção $.
Restrição de projeção de nome de campo vazio
As projeções find() e findAndModify() não podem incluir uma projeção de um nome de campo vazio. Por exemplo, a operação a seguir é inválida:
db.inventory.find( { }, { "": 0 } )
Nas versões anteriores, o MongoDB tratava a inclusão/exclusão do campo vazio como trataria a projeção de campos inexistentes.
Colisão de caminho: documentos incorporados e seus campos
Não é possível projetar um documento incorporado com qualquer um dos campos do documento incorporado. Por exemplo, pense em uma coleção inventory com documentos que contêm um campo size:
{ ..., size: { h: 10, w: 15.25, uom: "cm" }, ... }
A operação a seguir falha com um erro Path collision porque tenta projetar o documento size e o campo size.uom:
db.inventory.find( {}, { size: 1, "size.uom": 1 } )
Em versões anteriores, a projeção mais recente definida nos documentos incorporados e seus campos determinava a projeção:
  • Se a projeção do documento incorporado ocorrer após todas as projeções de seus campos, o MongoDB projetará o documento incorporado. Por exemplo, o documento de projeção { "size.uom": 1, size: 1 } produz o mesmo resultado que o documento de projeção { size: 1 }.

  • Se a projeção do documento incorporado ocorrer antes da projeção de qualquer um dos seus campos, o MongoDB projetará o campo ou campos especificados. Por exemplo, o documento de projeção { "size.uom": 1, size: 1, "size.h": 1 } produz o mesmo resultado que o documento de projeção { "size.uom": 1, "size.h": 1 }.

Colisão de caminho: $slice de uma array e campos incorporados
A projeção find() e findAndModify() não pode conter um $slice de uma array e um campo incorporado na array. Por exemplo, considere uma coleção inventory que contém um campo de array instock:
{ ..., instock: [ { warehouse: "A", qty: 35 }, { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ], ... }
A seguinte operação falha com um erro Path collision:
db.inventory.find( {}, { "instock": { $slice: 1 }, "instock.warehouse": 0 } )
Nas versões anteriores, a projeção aplica ambas as projeções e retorna o primeiro elemento ($slice: 1) na array instock, mas suprime o campo warehouse no elemento projetado. A partir do MongoDB 4.4, para obter o mesmo resultado, use o método db.collection.aggregate() com dois estágios $project separados.
$ Operador posicional e restrição $slice
As projeções find() e findAndModify() não podem incluir a expressão de projeção $slice como parte de uma expressão de projeção $. Por exemplo, a operação a seguir é inválida:
db.inventory.find( { "instock.qty": { $gt: 25 } }, { "instock.$": { $slice: 1 } } )
Nas versões anteriores, o MongoDB retorna o primeiro elemento (instock.$) na anterior instock que corresponde à condição de query, ou seja, a projeção posicional "instock.$" tem precedência e a $slice:1 não contém nenhum oplog. "instock.$": { $slice: 1 } não exclui nenhum outro campo do documento.
Limite de Sessões e $external Username

Para usar sessões de cliente e garantias de consistência causal com usuários de autenticação $external (usuários Kerberos, LDAP ou x.509), os nomes de usuário não podem ter mais de 10k bytes.

Tempo-limite de inatividade da sessão

As sessões que não recebem operações de leitura ou gravação por 30 minutos ou que não são atualizadas usando refreshSessions dentro desse limite são marcadas como expiradas e podem ser fechadas pelo servidor MongoDB a qualquer momento. Fechar uma sessão elimina as operações em andamento e os cursores abertos associados à sessão. Isso inclui cursores configurados com noCursorTimeout() ou maxTimeMS() maior que 30 minutos.

Considere um aplicativo que emite um db.collection.find(). O servidor retorna um cursor junto com um lote de documentos definido pelo cursor.batchSize() do find(). A sessão é atualizada toda vez que o aplicativo solicita um novo lote de documentos do servidor. No entanto, se o aplicativo demorar mais de 30 minutos para processar o lote atual de documentos, a sessão será marcada como expirada e encerrada. Quando o aplicativo solicita o próximo lote de documentos, o servidor retorna um erro, pois o cursor foi eliminado quando a sessão foi fechada.

Para operações que retornam um cursor, se o cursor ficar inativo por mais de 30 minutos, execute a operação em uma sessão explícita usando e atualize periodicamente Mongo.startSession() refreshSessions a sessão usando o comando. Por exemplo:

var session = db.getMongo().startSession()
var sessionId = session
sessionId // show the sessionId
var cursor = session.getDatabase("examples").getCollection("data").find().noCursorTimeout()
var refreshTimestamp = new Date() // take note of time at operation start
while (cursor.hasNext()) {
// Check if more than 5 minutes have passed since the last refresh
if ( (new Date()-refreshTimestamp)/1000 > 300 ) {
print("refreshing session")
db.adminCommand({"refreshSessions" : [sessionId]})
refreshTimestamp = new Date()
}
// process cursor normally
}

Na operação de exemplo, o método db.collection.find() está associado com uma sessão explícita. O cursor é configurado com noCursorTimeout() para evitar que o servidor feche o cursor se estiver ocioso. O loop while inclui um bloco que utiliza refreshSessions para atualizar a sessão a cada 5 minutos. Como a sessão nunca excederá o tempo-limite de inatividade de 30 minutos, o cursor pode permanecer aberto indefinidamente.

Para drivers MongoDB, consulte a documentação do driver para obter instruções e sintaxe para criar sessões.

Voltar

Mensagens de registro