Alterações de compatibilidade no MongoDB 6.0
Nesta página
- Agregação
- Fluxos de alterações
- Indexes
- O antigo shell
mongo
foi removido - Suporte a plataformas
- Expressões regulares
- Operadores removidos
- Opções removidas
- Parâmetros removidos
- Parâmetros renomeados
- Comportamento do
expireAfterSeconds
TTL quando definido comoNaN
- Conjuntos de réplicas
- Segurança
- Coleções de Time Series
- Alterações gerais
- Considerações de downgrade
Esta página descreve as alterações introduzidas no MongoDB 6.0 que podem afetar a compatibilidade com versões mais antigas do MongoDB.
O MongoDB 6.0 é uma versão principal, o que significa que é compatível com o MongoDB Atlas e sistema on-premises. O MongoDB 6.0 inclui alterações introduzidas nas Rapid Releases do MongoDB 5.1, 5.2 e 5.3. Esta página descreve as alterações de compatibilidade introduzidas nessas Rapid Releases e no MongoDB 6.0.
Para saber mais sobre as diferenças entre as Rapid Releases e versões principais, consulte Versões do MongoDB .
Agregação
allowDiskUse
Mudanças
A partir do MongoDB 6.0, os estágios do pipeline que exigem mais de 100 megabytes de memória para execução gravam arquivos temporários no disco por padrão. Esses arquivos temporários duram durante a execução do pipeline e podem influenciar o espaço de armazenamento na sua instância. Em versões anteriores do MongoDB, você deve passar { allowDiskUse: true }
para find
individuais e comandos aggregate
para habilitar esse comportamento.
Somente find
e aggregate
comandos podem substituir o parâmetro allowDiskUseByDefault
por um ou outro:
Usando
{ allowDiskUse: true }
para permitir a gravação de arquivos temporários no disco quandoallowDiskUseByDefault
estiver definido comofalse
Usando
{ allowDiskUse: false }
para proibir a gravação de arquivos temporários no disco quandoallowDiskUseByDefault
estiver definido comotrue
$$SEARCH_META
Limitações
A partir do MongoDB 6.0, a variável de agregação Atlas Search $$SEARCH_META
pode ser usada em qualquer lugar após um estágio $search
em qualquer pipeline, mas não pode ser usada após o estágio $lookup
ou $unionWith
em qualquer pipeline . A variável de aggregation $$SEARCH_META
não pode ser usada em nenhuma etapa subsequente após um estágio $searchMeta
.
Fluxos de alterações
A partir do MongoDB 5.3, durante a range migration, os eventosde change stream não são gerados para atualizações de documentos órfãos.
Filtros
A partir do MongoDB 6.0, sempre que possível, os filtros de correspondência são aplicados aos change streams mais cedo do que em versões anteriores. Isso melhora o desempenho. No entanto, quando um filtro for muito restritivo, uma correspondência anterior pode fazer com que uma operação bem-sucedida em versões anteriores falhe na versão 6.0.
Indexes
O último índice de chave de fragmento restante não pode ser descartado inadvertidamente
A partir do MongoDB 6.0, passar "*"
para dropIndexes
ou db.collection.dropIndexes()
elimina todos os índices , exceto o índice _id
e o último índice de chave de fragmento restante, se houver. Tentativas de eliminar explicitamente o último índice de chave shard restante geram um erro.
Os índices existentes podem ser eliminados durante a criação de um índice
A partir do MongoDB 5.2, você pode usar dropIndexes
ou db.collection.dropIndexes()
para eliminar os indexes existentes na mesma coleção, mesmo que haja uma index build em andamento. Em versões anteriores, tentar descartar um índice diferente durante uma construção de índice em andamento resulta em um erro BackgroundOperationInProgressForNamespace
.
Chaves de índice de documentos 2dsphere
Para evitar erros de memória, o indexMaxNumGeneratedKeysPerDocument
limita o número máximo de chaves de índice de esferas geradas para um único documento.
Consulte indexMaxNumGeneratedKeysPerDocument
.
Formato da chave do índice
A partir do MongoDB 6.0, foi introduzida uma alteração no formato de chave do índice exclusivo. Se você criar um índice único no MongoDB 6.0, o índice não funcionará com versões MongoDB anteriores a 5.3.2 ou 5.0.7.
O shell mongo
legado foi removido
O shell do mongo
é removido do MongoDB 6.0. A substituição é mongosh
.
Suporte a plataformas
Começando no MongoDB 5.1.2 as seguintes plataformas já não são mais suportadas:
Community Edition
RHEL-72-s390x
Expressões regulares
$regex
Encontrar queries não ignora mais Regex inválido
A partir do MongoDB 5.1, as opções de$regex options
inválidas não são mais ignoradas. Essa alteração torna mais consistente com o uso $regex options
de $regex
nas queries aggregate
de comando e projeção.
$regex
Comportamento de erro de validação de esquema
A partir do MongoDB 5.1, se uma collection tiver regras de validação de esquema que contenham $regex options
inválido, o servidor:
Operadores removidos
A partir do MongoDB 5.1, esses query operators legados são removidos:
Operador removido | Alternativa |
---|---|
$comment | |
$explain | |
$hint | |
$max | |
$maxTimeMS | |
$min | |
$orderby | |
$query | Consulte Métodos de cursor |
$returnKey | |
$showDiskLoc | |
| |
| |
|
Opções removidas
O MongoDB 6.0 remove a opção --cpu
mongod
.
Parâmetros removidos
O MongoDB 6.0 remove os seguintes parâmetros do servidor:
Parâmetro removido | Descrição |
---|---|
Esta opção é removida do MongoDB Community Edition. Está disponível no MongoDB Enterprise Edition. O FIPS não era uma funcionalidade suportada no MongoDB Community Edition. Se a sua instalação utilizou o FIPS mesmo assim, será necessário reconfigurar as conexões TLS/SSL antes de atualizar. |
Parâmetros renomeados
A partir do MongoDB 6.0, os seguintes parâmetros foram renomeados:
wiredTigerConcurrentReadTransactions
agora éstorageEngineConcurrentReadTransactions
wiredTigerConcurrentWriteTransactions
agora éstorageEngineConcurrentWriteTransactions
Comportamento do expireAfterSeconds
TTL quando definido como NaN
Configurar TTL expireAfterSeconds
a NaN
causa uma mudança de comportamento do MongoDB 4.4 até o MongoDB 6.0 que afeta a sincronização inicial do MongoDB 4.4 e versões anteriores, bem como o mongorestore
do MongoDB 4.4 e versões anteriores. Realizar qualquer uma dessas ações faz com que um expireAfterSeconds
de NaN
seja tratado como um expireAfterSeconds
de 0
. Dessa forma, pode ocorrer a expiração imediata do documento.
Conjuntos de réplicas
Afirmar que a preocupação de gravação em todo o cluster está definida ao iniciar ou adicionar fragmento
A partir do MongoDB 5.1, ao iniciar, reiniciar ou adicionar um servidor de shard com sh.addShard()
, o CWWC (Cluster Wide Write Concern) deve ser definido.
Se o CWWC
não estiver definido e o estilhaço estiver configurado de forma que a preocupação de gravação padrão seja { w : 1 }
o servidor de estilhaços falhará ao iniciar ou será adicionado e retornará um erro.
Consulte cálculos de write concern padrão para mais detalhes sobre como o write concern padrão é calculado.
rs.reconfig
Validação de write concern em todo o cluster
A partir do MongoDB 5.1, você deve definir o Cluster Wide Write Concern (CWWC) antes de emitir qualquer que,reconfigs
de outra forma, alteraria a preocupação de gravação padrão do novo membro do conjunto de réplicas .
Segurança
Autenticação Intra-Cluster
A partir do MongoDB 5.3, o SCRAM-SHA-1 não pode ser usado para autenticação intra-cluster. Somente SCRAM-SHA-256 é suportado.
Em versões anteriores do MongoDB, SCRAM-SHA-1 e SCRAM-SHA-256 podem ser usados para autenticação intra-cluster, mesmo que o SCRAM não esteja explicitamente habilitado.
O modo FIPS padroniza a autenticação SCRAM-SHA-1 como desativada
A partir do MongoDB 5.1, as instâncias em execução no modo FIPS têm o mecanismo de autenticação SCRAM-SHA-1 desabilitado por padrão. Você pode habilitar o mecanismo de autenticação SCRAM-SHA-1 com o setParameter.authenticationMechanisms comando.
Essa alteração não afetará os drives que têm como alvo o MongoDB setFeatureCompatibilityVersion
4,0+.
O OCSP deve estar ativado
A partir do MongoDB 6.0, se ocspEnabled
estiver definido como true
durante a initial sync, todos os nós deverão ser capazes de alcançar o respondente OCSP.
Se um membro falhar no estado STARTUP2
, defina tlsOCSPVerifyTimeoutSecs
como um valor menor que 5
.
Coleções de Time Series
Aviso
Se você criar uma coleção de séries temporais fragmentadas no MongoDB 5.1 ou superior, realizar o downgrade para uma versão anterior ao MongoDB 5.0.4 resultará em perda de dados.
Antes de fazer o downgrade para uma versão anterior a 5.0.4, elimine todas as collections de série temporal fragmentadas.
Índices Secundários em Séries Temporais
Se houver índices secundários em coleções de séries temporais e você precisar fazer downgrade da versão de compatibilidade de recursos (FCV), primeiro deverá descartar todos os índices secundários que são incompatíveis com o FCV rebaixado. Para mais informações, consulte setFeatureCompatibilityVersion
.
Alterações gerais
Itens obsoletos
Obsoleto(a) | Descrição |
---|---|
O método | |
O comando | |
Simple network management protocol (SNMP) | A partir do MongoDB 6.0, o SNMP está obsoleto e será removido na próxima versão. Para monitorar sua implantação, use o MongoDB Ops Manager. |
$mod
Comportamento de erro
Começando no MongoDB 5.1 (e 5.0.4), o operador $mod
retornará um erro se os valores divisor
ou remainder
forem avaliados como determinados valores. Consulte Comportamento do $mod.
Opcodes legados removidos
O MongoDB 6.0 remove o suporte para os seguintes opcodes e comandos do banco de dados antigos:
Aviso
Atualizar drivers
Para evitar interrupções devido à remoção desses opcodes, atualize seu driver para a versão mais recente.
Se você tentar se conectar a uma instância do MongoDB 3.4 ou mais antiga mongod
com um shell do MongoDB 5.1 ou mais recente mongo
, receberá uma mensagem de erro como a seguinte:
Connection handshake failed. Is your mongod 3.4 or older? :: caused by :: network error while attempting to run command 'isMaster' on host '127.0.0.1:27017'
Respostas mongod para Opcodes legados
Desde o MongoDB 3.6, os drivers do MongoDB usam OP_MSG em vez de OP_QUERY e os outros opcodes e comandos herdados.
Começando no MongoDB 6.0:
Removidas funções obsoletas de array e string para JavaScript do lado do servidor
O MongoDB 6.0 atualiza o mecanismo JavaScript interno utilizado para expressões de JavaScript do lado do servidor, $accumulator
, $function
e $where
e de MozJS-60 para MozJS-91. Várias funções de array e string de caracteres não padrão obsoletas que existiam no MozJS-60 são removidas no MozJS-91.
Para obter a lista completa de funções de array e string removidas, consulte as próximas seções nesta página.
Observação
Apenas funções estáticas são removidas
Apenas as funções JavaScript estáticas são removidas. Os equivalentes da função de protótipo das funções removidas ainda podem ser usados.
Por exemplo:
Array.concat(<array1>, <array2>)
é uma função estática e já não funciona mais no MongoDB 6.0.<array1>.concat(<array2>)
é uma função protótipo e ainda funciona no MongoDB 6.0.
Esse comportamento se aplica às funções de array e de string removidas.
Funções de array removidas
A partir do MongoDB 6.0, as seguintes funções de array foram removidas e não pode ser usado no JavaScript do lado do servidor com expressões $accumulator
, $function
e $where
:
Array.concat
Array.every
Array.filter
Array.forEach
Array.indexOf
Array.join
Array.lastIndexOf
Array.map
Array.pop
Array.push
Array.reduce
Array.reduceRight
Array.reverse
Array.shift
Array.slice
Array.some
Array.sort
Array.splice
Array.unshift
Funções de string removidas
A partir do MongoDB 6.0, as seguintes funções de array foram removidas e não pode ser usado no JavaScript do lado do servidor com expressões $accumulator
, $function
e $where
:
String.charAt
String.charCodeAt
String.concat
String.contains
String.endsWith
String.includes
String.indexOf
String.lastIndexOf
String.localeCompare
String.match
String.normalize
String.replace
String.search
String.slice
String.split
String.startsWith
String.substr
String.substring
String.toLocaleLowerCase
String.toLocaleUpperCase
String.toLowerCase
String.toUpperCase
String.trim
String.trimLeft
String.trimRight
Configurações-padrão db.stats()
A partir do MongoDB 6.0, o dbStats
e o db.stats()
só informam o espaço livre atribuído às coleções se o parâmetro estiver definido como 1.
Filtros e Agrupamentos de Índice
Iniciando no MongoDB 6.0, um filtro de índice utiliza a coleção definida anteriormente utilizando o comando planCacheSetFilter
.
A partir do MongoDB 8.0, use configurações de query em vez de adicionar filtros de índice. Os filtros de índice estão obsoletos a partir do MongoDB 8.0.
As configurações de query têm mais funcionalidades do que os filtros de índice. Além disso, os filtros de índice não são persistentes e você não pode criar facilmente filtros de índice para todos os nós de cluster. Para adicionar configurações de query e explorar exemplos, consulte setQuerySettings
.
Arrays em coleções e visualizações com o comando distinct
A partir do MongoDB 6.0, o comando distinct
retorna os mesmos resultados para coleção e views ao usar arrays.
Considerações de downgrade
As seções seguintes fornecem informações para remover funcionalidades anteriores incompatíveis de seu sistema. Se você estiver fazendo o downgrade do MongoDB 6.0 para uma versão anterior, revise as seções a seguir para garantir que seu sistema seja executado com sucesso após o downgrade.
Clustered Collections
A partir do MongoDB 5.3, se você estiver usando clustered collections, deverá eliminar essas coleções antes de fazer o downgrade para uma versão anterior do MongoDB.
Bloqueio de gravação do usuário
A partir do MongoDB 6.0, se você precisar fazer downgrade da versão de compatibilidade de funcionalidades, certifique-se de desabilitar a replicação de cluster para cluster e o bloqueio de escrita do usuário.
Consulte Cluster-to-Cluster Sync e Bloqueio de escrita de usuário.
Coleções de Time Series
Você deve descartar coleções de séries temporais antes de fazer downgrade:
MongoDB 6.0 ou posterior para MongoDB 5.0.7 ou anterior.
MongoDB 5.3 para MongoDB 5.0.5 ou anterior.
Veja as Coleções de séries temporais.
Cluster Parameters
Iniciando no MongoDB 6.0, certifique-se de que todas as operações do setClusterParameter
tenham sido concluídas. O downgrade downgrade fCV não poderá ocorrer com êxito se houver operações setClusterParameter
em andamento em clusters fragmentados.
Dados da política do SELinux
A partir do MongoDB 5.1, você deve executar o seguinte comando no diretório no qual a política do SELinux foi clonada anteriormente antes de fazer desatualizar para uma versão anterior do MongoDB:
sudo make uninstall
Configurações do Key Management Interoperability Protocol (KMIP)
Começando no MongoDB 6.0, a versão-padrão do protocolo KMIP é 1.2. Para usar a versão 1.0 ou 1.1 do KMIP, use a configuração useLegacyProtocol
.
A partir do MongoDB 5.3 Enterprise, se você estiver usando as seguintes configurações KMIP, você deve removê-loas do arquivo de configuração antes de fazer o downgrade para uma versão anterior do MongoDB:
Retenção baseada no tempo de fluxos de alterações antes e depois das coleções de imagens
A partir do MongoDB 6.0, se você estiver usando o changeStreamOptions.preAndPostImages.expireAfterSeconds
para controlar a retenção baseada em tempo de coleções pré e pós-imagem de fluxos de alteração, você deve garantir que não haja operações setClusterParameter
ativas ao fazer o downgrade.
Configurações de criptografia de log de auditoria
A partir do MongoDB 6.0 Enterprise, se você estiver usando criptografia de registro de auditorias, você deve remover as seguintes configurações do arquivo de configuração antes de fazer o downgrade para uma versão anterior do MongoDB:
Os registros de auditorias criptografados existentes permanecem criptografados e você pode manter qualquer procedimento que você desenvolveu para armazenamento e processamento de registros criptografados.
Consulte Registro de auditorias.
Altere fluxos com pré e pós-imagens de documentos
A partir do MongoDB 6.0, se você estiver usando imagens anteriores e posteriores de documentos para change streams, deverá desabilitar changeStreamPreandPostImages para cada coleção usando o collMod
comando antes de poder fazer o downgrade para uma versão anterior do MongoDB.
Alterar streams com eventos expandidos
Se o seu aplicativo usar alterar colunas, certifique-se de que não exija a opção showExpandedEvents
, que não estará disponível após o downgrade.
LDAP com srv:
e srv_raw:
Se a configuração do cluster estiver usando os novos tipos de URL "srv:"
ou "srv_raw:"
em sua configuração LDAP, não será possível reiniciar após um downgrade. Remova os novos tipos de URL da configuração do seu cluster antes de fazer o downgrade.
Coleções com campos criptografados
Você deve abandonar coleções que usam campos criptografados antes de
concluir o downgrade do FCV. O downgrade não será concluído se houver coleções usando encryptedFields
.
Criar Nova Operação de Documentos Usando $densify
Se o seu aplicativo usar $densify
para criar documentos que preencham lacunas, adicione valores ausentes ou preencha seus dados com um intervalo de valores especificado, remova o estágio $densify
do seu pipeline de agregação antes de fazer o downgrade. O estágio $densify
só está disponível na versão 5.1 e posterior.