Todos os produtos
Search
Central de documentação

:Alterações de compatibilidade no MongoDB 3.4

Última atualização: Jun 26, 2026

Este tópico descreve as alterações de compatibilidade no MongoDB 3,4.

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

Alterações em instâncias de cluster com sharding

Funções explícitas de membros

Em uma instância de cluster com sharding que executa o MongoDB 3,4, todas as instâncias mongod nos shards devem declarar explicitamente sua função como shardsvr por meio de um dos seguintes métodos:

  • Arquivo de configuração: especifique sharding.clusterRole: shardsvr.

  • Linha de comando: use a opção --shardsvr.

Nota

A porta padrão para instâncias mongod com a função shardsvr é 27018. Para usar uma porta diferente, defina a opção de configuração net.port ou o parâmetro --port com o número da porta desejada.

Limites de compatibilidade

Uma instância mongos que executa o MongoDB 3,4 não consegue se conectar a uma instância mongod que executa uma versão anterior.

Remoção de opções de configuração

O MongoDB 3,4 remove as seguintes opções de configuração do mongos:

  • Configuração de tamanho de chunk:

    • Opção de arquivo de configuração sharding.chunkSize.

    • Opção de linha de comando --chunkSize.

  • Configuração de divisão automática:

    • Opção de arquivo de configuração sharding.autoSplit.

    • Opção de linha de comando --noAutoSplit.

Descontinuação dos servidores de configuração SCCC

A partir do MongoDB 3,4, instâncias de cluster com sharding deixaram de suportar instâncias mongod espelhadas (SCCC) como servidores de configuração. Esse modo foi descontinuado no MongoDB 3.2.

O servidor de configuração deve ser implantado no modo de replica set (CSRS). Para atualizar sua instância de cluster com sharding para o MongoDB 3,4, o servidor de configuração precisa atender aos seguintes requisitos:

  • Deve estar em execução no modo CSRS.

  • Caso esteja no modo SCCC, é possível convertê-lo para o modo CSRS.

Compatibilidade de renomeação de coleções com a sincronização inicial

Se uma coleção usada como source de sincronização for renomeada durante a sincronização inicial, o processo é interrompido e reiniciado, evitando riscos de corrupção de dados. Para mais informações, consulte SERVER-26117.

As operações a seguir envolvem a renomeação de coleções:

  • O comando renameCollection: como o método db.collection.renameCollection().

  • O estágio $out em uma operação de agregação, como ao usar o método db.collection.aggregate() ou o comando aggregate com o estágio $out.

  • A opção out no MapReduce, como ao usar o método db.collection.mapReduce() ou o comando mapReduce com a opção out especificada.

  • O comando convertToCapped, utilizado para converter uma coleção comum em uma coleção capped.

Ao atualizar do MongoDB 3.2.11 ou versões anteriores para o 3,4, a sincronização inicial pode falhar caso encontre uma operação de renomeação de coleção.

Antes do MongoDB v3.2.11, o processo de sincronização inicial continuava ao encontrar uma operação de renomeação de coleção que poderia corromper dados. Para mais informações, consulte SERVER-4941.

Operações descontinuadas

Comando group

A partir do MongoDB 3,4, o comando group e o método do mongo shell db.collection.group() foram descontinuados. Use db.collection.aggregate() ou db.collection.mapReduce() como alternativa.

Comando aggregate sem informações de cursor

A partir do MongoDB 3.6, a saída do comando aggregate deve incluir um cursor na opção cursor, a menos que a opção explain seja especificada para análise do plano de execução.

  • Para indicar um cursor com o tamanho de lote padrão, especifique cursor: {}.

  • Para indicar um cursor com tamanho de lote não padrão, use cursor: { batchSize: <num> }.

Especificações de coleções e índices

Validação de opções de coleção

A partir do MongoDB 3,4, o comando create e uma operação db.createCollection() realizam uma validação mais rigorosa das opções de coleção. Use somente opções válidas suportadas por create ou db.createCollection().

Por exemplo, a operação a seguir não é mais válida porque inclui a opção inválida cappedtypo:

db.createCollection( "myCappedCollection", { cappedtypo: true, size: 5242880 } )

Validação de especificação de índices

A partir do MongoDB 3,4, o comando createIndexes e o método db.collection.createIndex() realizam uma validação mais rigorosa na criação de índices. Essa validação não se aplica a índices já existentes. As seguintes regras de validação são aplicadas:

  • Certifique-se de que o value no padrão de chave de índice key: value seja válido. Valores permitidos:

    Valor

    Descrição

    Number > 0

    Para índices ascendentes.

    Number < 0

    Para índices descendentes.

    String

    Para tipos de índice especiais, somente "text", "2dsphere", "2d" e "hashed" são permitidos.

    Por exemplo, as operações a seguir não são mais válidas:

    db.collection.createIndex( { x: 0 } );
    db.collection.createIndex( { y: "text2d" } );
    db.collection.createIndex( { z: NaN } );
    db.collection.createIndex( { x: 1, unique: true } )
  • Certifique-se de que as opções de índice especificadas sejam válidas. Antes do MongoDB 3,4, opções de índice inválidas eram ignoradas. A partir do MongoDB 3,4, o MongoDB reporta um erro caso opções de índice inválidas sejam especificadas. Por exemplo, as operações a seguir não são mais válidas:

    db.collection.createIndex( { y: 1 }, { uniques2: true} );
    db.collection.createIndex( { z: 1 }, { expireAfterSec: 350 } )

Alterações gerais de compatibilidade

  • Ajuste nos limites de namespace: a partir do MongoDB 3,4, nomes de banco de dados não suportam mais o símbolo $.

    Nota

    Antes de atualizar para o MongoDB 3,4, exclua todos os bancos de dados cujos nomes contenham $.

  • Remoção do parâmetro textSearchEnabled. A partir do MongoDB 2.6, a busca de texto é ativada por padrão.

  • Remoção da ferramenta mongosniff: a partir do MongoDB 3,4, o mongosniff é substituído pela ferramenta mongoreplay, que oferece recursos mais poderosos e suporta captura e análise de tráfego de rede de forma mais flexível.

  • Alterações no comportamento do estágio de agregação $project: se o estágio $project retornar um documento vazio (sem campos preservados ou adicionados), um erro é reportado.

  • Problemas de contagem com hints e sparse indexes: ao usar hint() especificando um sparse index para contar documentos em uma coleção (com um predicado de consulta vazio), o sparse index pode resultar em contagens imprecisas.

    db.collection.insert({ _id: 1, y: 1 } );
    db.collection.createIndex( { x: 1 }, { sparse: true } );
    
    db.collection.find().hint( { x: 1 } ).count();

    Para obter resultados de contagem corretos, não especifique um sparse index em hint() ao contar todos os documentos de uma coleção.

    db.collection.find().count();
    
    db.collection.createIndex({ y: 1 });
    db.collection.find().hint({ y: 1 }).count();

    Antes do MongoDB 3,4, os hints eram ignorados quando o uso de sparse indexes resultava em contagens incompletas.

Alterações nas permissões de funções de usuário

A partir do MongoDB 3,4, as permissões das seguintes funções integradas deixaram de se aplicar aos bancos de dados local e config:

Nome da função

Descrição

readAnyDatabase

Para conceder permissões de leitura no banco de dados local, crie um usuário no banco de dados admin e atribua explicitamente a função read do banco de dados local a esse usuário. Como alternativa, acesse os bancos de dados config e local com a função clusterManager ou clusterMonitor.

readWriteAnyDatabase

Para conceder permissões de leitura/gravação no banco de dados local, crie um usuário no banco de dados admin e atribua explicitamente a função readWrite do banco de dados local a esse usuário.

userAdminAnyDatabase

N/A.

dbAdminAnyDatabase

Para conceder permissões administrativas no banco de dados local, crie um usuário no banco de dados admin e atribua explicitamente a função dbAdmin do banco de dados local a esse usuário.

As seguintes funções integradas possuem permissões nos bancos de dados local e config:

  • clusterManager

  • clusterMonitor

  • backup

  • restore

Recursos incompatíveis com versões anteriores

O MongoDB 3,4 introduz os seguintes recursos que armazenam dados de forma incompatível com versões anteriores. Para ativar esses recursos, defina featureCompatibilityVersion como "3.4".

  • Views

  • Collation e índices sem distinção entre maiúsculas e minúsculas

  • Tipo decimal

  • Versão de índice v2

    • Suporta collation e tipos de dados decimais.

    • Quando featureCompatibilityVersion está definido como "3.4", a versão padrão de novos índices é v2. Caso contrário, a versão padrão é v1.

Nota

Após ativados, esses recursos incompatíveis tornam o processo de downgrade mais complexo.

Para reduzir ao mínimo a possibilidade de downgrade, recomendamos que seu ambiente seja executado sem ativar esses recursos após a atualização. Ative-os somente quando tiver certeza de que a necessidade de downgrade é mínima.

Default featureCompatibilityVersion values:

  • Novas implantações do MongoDB 3,4: "3.4".

  • Implantações atualizadas a partir do MongoDB 3.2: "3.2" (deve ser definido manualmente como "3.4").

Antes do MongoDB 3,4, se um banco de dados contiver views, definições de collation ou índices v2, o MongoDB não consegue iniciar. Caso existam campos do tipo decimal, as operações sobre esses documentos podem falhar.

Para atualizar para o MongoDB 3,4, todos os dados incompatíveis devem ser removidos, incluindo views, índices v2 e campos decimais.

Alterações de compatibilidade de drivers

Para usar os novos recursos introduzidos no MongoDB 3,4 (como tipo decimal e collation), atualize seu driver para uma versão que suporte esses recursos.

Alterações de comportamento do $in com elemento único e do upsert

Quando uma operação upsert não encontra documentos correspondentes, ela cria um documento base para upserts com base na declaração de igualdade do predicado de consulta e, em seguida, aplica os operadores de atualização ao documento. Exemplo:

db.c.drop()
db.c.update( { a : 3, b: "foo" }, { $set : { c : 15 } }, { upsert : true } )
db.c.find()
{ "_id" : ObjectId("59c03009529946822d0afb8c"), "a" : 3, "b" : "foo", "c" : 15 }

Antes do MongoDB 3,4, um $in com elemento único não inicializava campos.

db.c.drop()
db.c.update( { a : { $in : [1] } }, { $addToSet : { a : 2 } }, { upsert : true } )
db.c.find()
{ "_id" : ObjectId("58bdb00eb39e8f87607e9222"), "a" : [ 2 ] }

A partir do MongoDB 3,4, um $in com elemento único é tratado como uma declaração de igualdade para upserts:

  • Se um predicado de consulta incluir um $in com elemento único, os campos são inicializados como campos escalares em vez de arrays.

  • A operação $addToSet do exemplo anterior falha porque operadores de array não podem ser aplicados a campos escalares.

Solução: envolva a expressão $in em $elemMatch para forçar a manutenção do tipo array dos campos.

db.c.drop()
db.c.update(
   { a : { $elemMatch : { $in : [ 2 ] } } },
   { $addToSet : { a: 3 } },
   { upsert: true } )
db.c.find()
{ "_id" : ObjectId("..."), "a" : [ 3 ] }