Todos os produtos
Search
Central de documentação

:Alterações de compatibilidade no MongoDB 4.0

Última atualização: Jun 26, 2026

Este tópico descreve as alterações de compatibilidade introduzidas no MongoDB 4.0.

Para obter mais informações sobre as alterações oficiais de compatibilidade do MongoDB, consulte o site do MongoDB.

Descontinuação do MONGODB-CR

A partir da versão 4.0, o MongoDB não oferece mais suporte ao modo de autenticação MONGODB-CR, que foi descontinuado.

Desde o MongoDB 3.0, não é mais possível criar um usuário MONGODB-CR. A única exceção ocorre quando sua implantação foi atualizada da versão 2.6 ou anterior e o modo de autenticação do usuário MONGODB-CR original não foi atualizado.

Caso sua implantação ainda utilize o modo MONGODB-CR para armazenar credenciais de usuário, será necessário atualizá-lo para o Salted Challenge Response Authentication Mechanism (SCRAM) antes de fazer o upgrade para o MongoDB 4.0.

Remoção do comando authSchemaUpgrade

O MongoDB 4.0 removeu o comando authSchemaUpgrade. Esse comando era utilizado nas versões 3.0 a 3.6 para converter usuários MONGODB-CR em usuários SCRAM.

Remoção do suporte a MongoDB-CR em db.copyDatabase() e copydb

O método db.copyDatabase() e o comando copydb não conseguem copiar dados de uma instância mongod que impõe o modo de autenticação MONGODB-CR.

Em conjunto com essa alteração, o MongoDB 4.0 também removeu o comando copydbgetnonce.

Descontinuação do MMAPv1

O mecanismo de armazenamento MMAPv1 foi descontinuado a partir do MongoDB 4.0. É obrigatório migrar sua instância para o mecanismo de armazenamento WiredTiger.

Limites em certificados de autenticação X.509

No MongoDB 4.0, se você especificar --sslAllowInvalidCertificates ou net.ssl.allowInvalidCertificates: true (renomeados para --tlsAllowInvalidateCertificates ou net.tls.allowInvalidCertificates: true no MongoDB 4.2) ao usar autenticação x.509, um certificado inválido servirá apenas para estabelecer a conexão TLS/SSL, mas não será suficiente para concluir a autenticação.

Para resolver esse problema, substitua o certificado inválido por um válido (como um assinado por uma CA confiável) ou use net.ssl.CAFile para definir uma CA personalizada.

Instâncias de replica set

Remoção do pv0 de replica set

O MongoDB 4.0 eliminou a versão 0 do protocolo de replica set (pv0), que já estava descontinuada. Antes de atualizar sua versão de protocolo, faça primeiro o upgrade para pv1. Código de exemplo:

cfg = rs.conf();
cfg.protocolVersion=1;
rs.reconfig(cfg);

Além disso, recomendamos aumentar o valor de settings.catchUpTimeoutMillis para reduzir a probabilidade de rollback quando a configuração de write concern for w:1.

Remoção da replicação master-slave

A replicação master-slave deixou de ser suportada no MongoDB 4.0. Se sua implantação ainda estiver utilizando esse modo, converta-a para o modo de replica set (CSRS).

Logging para instâncias de replica set

A partir do MongoDB 4.0, não é mais possível desativar o recurso de logging para membros de replica set que utilizam o mecanismo de armazenamento WiredTiger. Isso significa que as opções --nojournal e storage.journal.enabled: false não são mais aceitas.

Criação de índices em instâncias de replica set

Ao configurar uma instância de replica set com --replSet ou replication.replSetName, os parâmetros --noIndexBuildRetry e storage.indexBuildRetry não podem ser especificados. Isso significa que não é possível especificar --noIndexBuildRetry ou storage.indexBuildRetry em uma instância mongod que faça parte de um replica set.

Limites de rollback

O MongoDB 4.0 removeu o limite de volume de dados para rollback, que anteriormente era de 300 MB, e introduziu o parâmetro configurável rollbackTimeLimitSecs. Nessa versão, o tempo limite padrão para rollback é de 1 dia. Nas versões anteriores ao MongoDB 4.0, esse limite era fixo em 30 minutos.

Instâncias de sharded cluster

O mongos passou a utilizar o nível de write concern "majority" nas seguintes operações que afetam os metadados do sharded cluster.

Comando

Método

Descrição

addShard

sh.addShard()

create

db.createCollection()

drop

db.collection.drop()

dropDatabase

db.dropDatabase()

Alterado no MongoDB 3.6.

enableSharding

sh.enableSharding()

movePrimary

renameCollection

db.collection.renameCollection()

shardCollection

sh.shardCollection()

removeShard

setFeatureCompatibilityVersion

Compatibilidade de recursos do MongoDB 4.0

Determinados recursos do MongoDB 4.0 exigem arquivos binários da versão 4.0 e o parâmetro featureCompatibilityVersion definido como 4.0. Entre eles estão:

  • SCRAM-SHA-256

  • Novos operadores de conversão de tipos (incluindo $toBool e $toInt) e melhorias associadas

  • Transações multidocumento

  • Alterações nas opções de $dateToString

  • Novos métodos de change stream

  • Mudanças no tipo de dados do token de retomada de change stream

Outras alterações

  • Instâncias de sharded cluster agora suportam os operadores de consulta geoespacial $near e $nearSphere.

  • No comando create e no método do mongo shell db.createCollection(), a opção autoIndexId não pode mais ser definida como false ao criar coleções em bancos de dados diferentes de local.

  • Quando a autenticação está ativada e o comando listDatabases é executado sem a permissão de operação listDatabases, o MongoDB retorna a lista de todos os bancos de dados nos quais você possui permissão de operação find. Antes da versão 4.0, executar esse comando sem a permissão de operação listDatabases resultava na mensagem Unauthorized.

  • O valor padrão de taskExecutorPoolSize mudou de 0 para 1. Em sistemas Linux, para restaurar o comportamento anterior em uma implantação V4.0, defina taskExecutorPoolSize como 0 e AsyncRequestsSenderUseBaton como false.

  • Nas instâncias mongod e mongos do MongoDB 4.0, não é permitido definir transportLayer e net.transportLayer como legacy. O valor padrão de transportLayer é asio e não pode ser alterado.

  • A partir do MongoDB 4.0, o comando reIndex e seu método correspondente db.collection.reIndex() adquirem um bloqueio exclusivo global, impedindo outras operações até que sejam concluídos.

  • Se os valores de campos diferentes de year, isoYear e timezone ultrapassarem seus intervalos válidos, $dateFromParts subtrai a diferença das demais partes da data para realizar o cálculo. Nas versões anteriores ao MongoDB 4.0, valores fora do intervalo válido geravam erro.

  • O comportamento da operação killCursors foi modificado. Antes do MongoDB 4.0, bastava obter um ID de cursor para encerrá-lo. Agora, killCursors permite encerrar qualquer cursor existente. Caso você não tenha permissão para encerrar um cursor, killCursors retorna um erro.

  • Foi adicionada a operação killAnyCursor no MongoDB 4.0, que concede permissão para encerrar qualquer cursor de uma coleção específica.

  • Ao tentar conectar uma instância mongos a outra instância com uma versão de compatibilidade de recursos (fCV) superior, a instância mongos pode falhar a partir do MongoDB 4.0. Por exemplo, uma instância mongos do MongoDB 4.0 não consegue se conectar a um sharded cluster com fCV definido como 4.2. No entanto, se o fCV do sharded cluster permanecer em 4.0, a conexão ocorre normalmente.

  • O MongoDB 4.0 passa a resolver endereços IP de localhost com base nas configurações especificadas, em vez de assumir automaticamente 127.0.0.1.

cursor.min() e cursor.max()

Ao definir um intervalo usando max() e min(), o limite especificado por max() deve ser estritamente maior que o definido por min().

Em versões anteriores, os limites podiam ser iguais, porém nenhuma entrada de índice era verificada, o que resultava em um conjunto de resultados vazio.

TLS 1.0 desativado

Os arquivos binários do MongoDB (mongod, mongos e mongo) desativam a criptografia TLS 1.0 por padrão em sistemas compatíveis com TLS 1.1 ou superior.

Para forçar a ativação do TLS 1.0:

  • Em instâncias mongod, especifique net.ssl.disabledProtocols: none no arquivo de configuração ou utilize o parâmetro de linha de comando --sslDisabledProtocols none.

  • Para instâncias mongos, use net.ssl.disabledProtocols: none ou --sslDisabledProtocols none.

  • No mongo shell, adicione o parâmetro --sslDisabledProtocols none.

    O parâmetro --sslDisabledProtocols está disponível nas seguintes versões do mongo shell:

    • MongoDB 4.0+

    • MongoDB 3.6.5+

    • MongoDB 3.4.15+

No macOS, ao usar o mongo shell do MongoDB 3.6.4 ou anterior para se conectar a uma instância de sharded cluster do MongoDB 4.0+, é necessário ativar explicitamente o TLS 1.0.

Mongo shell

show collections

No mongo shell, o comando show collections equivale a:

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • Usuários com as permissões adequadas visualizam todas as coleções não sistêmicas de seus bancos de dados.

  • Usuários sem permissões veem apenas as coleções acessíveis.

Quando o mongo shell do MongoDB 4.0 se conecta a um banco de dados MongoDB em versão inferior à V4.0, os parâmetros authorizedCollections e nameOnly não são suportados:

  • É necessária a permissão listCollection para executar o comando.

  • Se usuários sem permissão executarem o comando, o MongoDB incluirá resultados aproximados no campo authenticatedUserPrivileges retornado por connectionStatus.

db.getCollectionNames()

No mongo shell, o método db.getCollectionNames() equivale a:

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • Este método lista todas as coleções do banco de dados para usuários com permissão de acesso.

  • Para usuários sem permissão de acesso, apenas as coleções autorizadas são listadas.

Remoção de arquivos binários e campos ou comandos descontinuados

mongoperf

O arquivo binário mongoperf foi removido no MongoDB 4.0.

Comandos copydb e clone

Os comandos copydb e clone foram descontinuados no MongoDB 4.0, juntamente com as funções auxiliares do mongo shell db.copyDatabase() e db.cloneDatabase().

Como alternativa, utilize mongodump e mongorestore (com os parâmetros --nsFrom e --nsTo nas opções do mongorestore) ou escreva um script usando um driver.

Por exemplo, para copiar o banco de dados test para o banco de dados examples na mesma instância, siga estas etapas:

  1. Use mongodump para exportar o banco de dados test para um arquivo compactado chamado mongodump-test-db.

    mongodump --archive="mongodump-test-db" --db=test
  2. Utilize mongorestore com os parâmetros --nsFrom e --nsTo para restaurar os dados do arquivo compactado.

    mongorestore --archive="mongodump-test-db" --nsFrom='test.*' --nsTo='examples.*'
Nota

Adicione outros parâmetros conforme necessário, como --uri, --host e --username.

Outra opção é evitar o uso de arquivos compactados: utilize mongodump para enviar a saída do banco de dados test diretamente para o fluxo de saída padrão e direcione-a via pipe para mongorestore.

mongodump --archive --db=test | mongorestore --archive  --nsFrom='test.*' --nsTo='examples.*'

Parâmetros

O parâmetro descontinuado logUserIds foi removido.

Operador $isolated

O operador $isolated não é mais suportado pelo MongoDB. Caso possua índices ou visões que contenham o operador $isolated, recrie-os sem ele antes de realizar o upgrade.

Comando geoNear

O comando geoNear foi descontinuado. Utilize as alternativas abaixo:

  • Estágio de agregação $geoNear

  • Operador de consulta $near

  • Operador de consulta $nearSphere

Opção maxScan

Tanto a opção maxScan quanto o método do mongo shell cursor.maxScan() foram descontinuados. Substitua-os por maxTimeMS ou pelo método cursor.maxTimeMS().

Alterações em campos de saída

  • Os seguintes campos no resultado de replSetGetStatus foram descontinuados:

    • replSetGetStatus.syncingTo

    • replSetGetStatus.members[n].syncingTo

    Utilize replSetGetStatus.replSetGetStatus.syncSourceHost e replSetGetStatus.members[n].syncSourceHost como substitutos.

  • O estágio de agregação $currentOp, o comando currentOp e a função auxiliar db.currentOp() deixaram de retornar o campo threadId na saída.

  • O campo asserts.warning em serverStatus retorna sempre 0.