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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Alterado no MongoDB 3.6. |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||
|
|
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
$toBoole$toInt) e melhorias associadasTransações multidocumento
Alterações nas opções de
$dateToStringNovos 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
$neare$nearSphere.No comando
createe no método do mongo shelldb.createCollection(), a opçãoautoIndexIdnão pode mais ser definida comofalseao criar coleções em bancos de dados diferentes delocal.Quando a autenticação está ativada e o comando
listDatabasesé executado sem a permissão de operaçãolistDatabases, o MongoDB retorna a lista de todos os bancos de dados nos quais você possui permissão de operaçãofind. Antes da versão 4.0, executar esse comando sem a permissão de operaçãolistDatabasesresultava na mensagemUnauthorized.O valor padrão de
taskExecutorPoolSizemudou de0para1. Em sistemas Linux, para restaurar o comportamento anterior em uma implantação V4.0, definataskExecutorPoolSizecomo0eAsyncRequestsSenderUseBatoncomofalse.Nas instâncias mongod e mongos do MongoDB 4.0, não é permitido definir
transportLayerenet.transportLayercomolegacy. O valor padrão detransportLayeréasioe não pode ser alterado.A partir do MongoDB 4.0, o comando
reIndexe seu método correspondentedb.collection.reIndex()adquirem um bloqueio exclusivo global, impedindo outras operações até que sejam concluídos.Se os valores de campos diferentes de
year,isoYearetimezoneultrapassarem seus intervalos válidos,$dateFromPartssubtrai 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
killCursorsfoi modificado. Antes do MongoDB 4.0, bastava obter um ID de cursor para encerrá-lo. Agora,killCursorspermite encerrar qualquer cursor existente. Caso você não tenha permissão para encerrar um cursor,killCursorsretorna um erro.Foi adicionada a operação
killAnyCursorno 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 em4.0, a conexão ocorre normalmente.O MongoDB 4.0 passa a resolver endereços IP de
localhostcom base nas configurações especificadas, em vez de assumir automaticamente127.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: noneno arquivo de configuração ou utilize o parâmetro de linha de comando--sslDisabledProtocols none.Para instâncias mongos, use
net.ssl.disabledProtocols: noneou--sslDisabledProtocols none.-
No mongo shell, adicione o parâmetro
--sslDisabledProtocols none.O parâmetro
--sslDisabledProtocolsestá 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
listCollectionpara executar o comando.Se usuários sem permissão executarem o comando, o MongoDB incluirá resultados aproximados no campo
authenticatedUserPrivilegesretornado porconnectionStatus.
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:
-
Use
mongodumppara exportar o banco de dadostestpara um arquivo compactado chamadomongodump-test-db.mongodump --archive="mongodump-test-db" --db=test -
Utilize
mongorestorecom os parâmetros--nsFrome--nsTopara restaurar os dados do arquivo compactado.mongorestore --archive="mongodump-test-db" --nsFrom='test.*' --nsTo='examples.*'
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
$geoNearOperador de consulta
$nearOperador 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
replSetGetStatusforam descontinuados:replSetGetStatus.syncingToreplSetGetStatus.members[n].syncingTo
Utilize
replSetGetStatus.replSetGetStatus.syncSourceHostereplSetGetStatus.members[n].syncSourceHostcomo substitutos. O estágio de agregação
$currentOp, o comandocurrentOpe a função auxiliardb.currentOp()deixaram de retornar o campothreadIdna saída.O campo
asserts.warningemserverStatusretorna sempre0.