Todos os produtos
Search
Central de documentação

:Alterações de compatibilidade no MongoDB 3.6

Última atualização: Jun 26, 2026

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

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

Alterações de compatibilidade do binding de localhost

A partir do MongoDB 3.6, os binários mongod e mongos são vinculados ao localhost por padrão. Se o parâmetro net.ipv6 estiver definido no arquivo de configuração ou se o suporte a IPv6 estiver ativo por meio da opção de linha de comando --ipv6, esses binários serão vinculados ao endereço IPv6 do localhost.

A partir do MongoDB 2.6, apenas os binários dos pacotes oficiais RPM do MongoDB (para Red Hat, CentOS, Fedora Linux e derivados) e dos pacotes DEB (para Debian, Ubuntu e derivados) são vinculados ao localhost por padrão.

Quando vinculado exclusivamente ao localhost, os binários do MongoDB 3.6 aceitam conexões apenas de clientes na mesma máquina — incluindo o mongo shell, membros de instâncias de replica set ou nós em instâncias de sharded cluster. Clientes remotos não conseguem se conectar a binários vinculados somente ao localhost.

Para substituir o comportamento padrão e vincular os binários a outros endereços IP, use o parâmetro net.bindIp no arquivo de configuração ou a opção de linha de comando --bind_ip para especificar uma lista de hostnames ou endereços IP.

Importante

Antes de vincular a um endereço não local (como um endereço IP acessível publicamente), certifique-se de que o cluster está protegido contra acessos não autorizados. Para isso, ative a autenticação e fortaleça a infraestrutura de rede.

Por exemplo, a instância mongod a seguir está vinculada ao localhost e ao hostname My-Example-Associated-Hostname. Esse hostname está associado ao endereço IP 198.51.100.1.

mongod --bind_ip localhost,My-Example-Associated-Hostname

Para se conectar a essa instância, clientes remotos devem especificar o hostname ou seu endereço IP associado 198.51.100.1.

mongo --host My-Example-Associated-Hostname

mongo --host 198.51.100.1

Instâncias de sharded cluster

A partir do MongoDB 3.6, os shards devem usar a arquitetura de replica set. Para atualizar uma instância de sharded cluster para o MongoDB 3.6, todos os servidores de shard precisam estar em execução como replica sets.

HTTP API e REST API

A partir do MongoDB 3.6, o MongoDB remove a HTTP API e a REST API.

Configuração

Opção mongod/mongos

net.http.enabled

httpinterface

net.http.JSONPEnabled

nohttpinterface

net.http.port

jsonp

net.http.RESTInterfaceEnabled

rest

Atualizações de ferramentas

O MongoDB 3.6 remove a ferramenta mongooplog.

Alterações de compatibilidade em operações com arrays

Alterações de comportamento de $type: "array"

A partir do MongoDB 3.6, as expressões type: "array" e $type: 4 correspondem a campos do tipo array que contêm elementos de qualquer tipo.

Antes do MongoDB 3.6, $type: "array" correspondia apenas a campos do tipo array que continham arrays aninhados.

Por exemplo, uma coleção chamada c contém os seguintes documentos:

{ "_id": 1, "a": [ 1, 2, 3 ] },
{ "_id": 2, "a": [ 1, 2, [ 3, 4 ] ] }

A operação a seguir consulta dados pelo tipo do campo a:

db.c.find( { "a": { $type : "array" } } )

A partir do MongoDB 3.6, uma consulta $type retorna os dois documentos da coleção, pois passa a detectar que o campo a é um array.

{ "_id": 1, "a": [ 1, 2, 3 ] },
{ "_id": 2, "a": [ 1, 2, [ 3, 4 ] ] }

Antes do MongoDB 3.4, uma consulta $type retornava apenas documentos em que o campo a continha elementos do tipo array BSON.

{ "_id": 2, "a": [ 1, 2, [ 3, 4 ] ] }

Se a instância atual executa o MongoDB 3.4.x e você utiliza índices parciais cujo partialFilterExpression contém $type: "array" ou $type: 4, reconstrua esses índices após a atualização para o MongoDB 3.6 a fim de evitar conflitos decorrentes das alterações semânticas em $type: 'array'.

Alterações de comportamento na ordenação de arrays

A partir do MongoDB 3.6, ao ordenar por um campo do tipo array, o MongoDB usa o elemento de menor valor do array como chave de ordenação ascendente e o elemento de maior valor como chave de ordenação descendente. A ordenação deixa de considerar os predicados de consulta ao selecionar um elemento do array como chave de ordenação. Essa mudança de comportamento se aplica ao comando find e às operações de pipeline de agregação.

Como consequência, aplicações que ordenam por campos do tipo array podem retornar resultados de ordenação diferentes.

Nota

Em decorrência de ajustes adicionais ao comportamento de ordenação por campo de array no MongoDB 4.4, ao ordenar por um campo de array com um índice multikey, o plano de consulta inclui um estágio de ordenação bloqueante, a menos que:

  • Os limites do índice de todos os campos de ordenação sejam [MinKey, MaxKey].

  • Nenhum limite de campo indexado como multikey tenha o mesmo prefixo de caminho que o padrão de ordenação.

Alterações de comportamento de ordenação no método find

No MongoDB, uma chave de ordenação é o elemento do array utilizado durante o processo de ordenação para comparar documentos com campos do tipo array. Em uma ordenação ascendente, os documentos que contêm arrays com as chaves de menor valor aparecem primeiro. Em uma ordenação descendente, os documentos com as chaves de maior valor são listados primeiro.

Diferenças de comportamento de ordenação entre as versões:

  • Antes do MongoDB 3.4: a ordenação por campo de array considera os predicados de consulta ao determinar a chave de ordenação.

  • A partir do MongoDB 3.6: a ordenação por campo de array deixa de considerar os predicados de consulta ao determinar a chave de ordenação. Em vez disso, a chave de ordenação é o elemento de menor ou maior valor no array.

Se sua aplicação foi atualizada para o MongoDB 3.6, ordena por um campo de array e utiliza predicados de consulta, verifique se a lógica de ordenação é afetada pela mudança de comportamento e ajuste o código para garantir a compatibilidade.

Exemplo:

Suponha que uma coleção chamada coll contenha os seguintes documentos:

{ _id: 0, a: [-3, -2, 2, 3] }
{ _id: 1, a: [ 5, -4 ] }

Execute uma operação de consulta e ordenação para o campo de array a:

db.coll.find({a: {$gte: 0}}).sort({a: 1});
  • No MongoDB 3.6, a chave de ordenação é o elemento de menor valor no array (ignorando os predicados de consulta):

    • O elemento de menor valor no array a para o documento com _id: 0 é -3.

    • O elemento de menor valor no array a para o documento com _id: 1 é -4.

    O seguinte resultado é retornado em ordem ascendente:

    { "_id" : 1, "a" : [ 5, -4 ] }
    { "_id" : 0, "a" : [ -3, -2, 2, 3 ] }
  • Antes do MongoDB 3.4, a chave de ordenação é o elemento de menor valor que corresponde ao predicado de consulta {$gte: 0}:

    • Os elementos correspondentes para o documento com _id: 0 são [2, 3], e o elemento de menor valor "2" é usado como chave de ordenação do documento.

    • O elemento correspondente para o documento com _id: 1 é [5], e o elemento de menor valor "5" é usado como chave de ordenação do documento.

    O seguinte resultado é retornado em ordem ascendente:

    { _id: 0, a: [-3, -2, 2, 3] }
    { _id: 1, a: [ 5, -4 ] }

Alterações de comportamento de ordenação no método de agregação

A partir do MongoDB 3.6, ao usar db.collection.aggregate() para ordenar por um campo de array, apenas um único elemento do array é utilizado como chave de ordenação.

Exemplo:

// Documents.
{ "_id" : 1, "timestamps" : [ ISODate("2017-07-15T15:31:01Z"), ISODate("2017-07-21T18:31:01Z") ] }
{ "_id" : 0, "timestamps" : [ ISODate("2017-07-21T15:31:01Z"), ISODate("2017-07-21T13:31:01Z") ] }

// Query.
db.c.aggregate([{$sort: {timestamps: -1}}])

No MongoDB 3.6:

  • Para uma ordenação descendente, o horário mais recente do array é usado como chave de ordenação:

    • 15:31 do dia 21 de julho para o documento com _id: 0, e

    • 17:31 do dia 21 de julho para o documento com _id: 1.

  • A ordenação é descendente. Portanto, as chaves são ordenadas do mais recente para o menos recente, resultando no documento com _id: 1 sendo listado antes do documento com _id: 0.

Antes do MongoDB 3.6, o array inteiro era usado como chave de ordenação nas ordenações por agregação. As chaves de ordenação dos arrays são comparadas elemento a elemento para determinar a ordem dos resultados.

// Documents.
{_id: 0, a: [3, 1, 5]}
{_id: 1, a: [3, 4, 0]}

// Query.
db.coll.aggregate([{$sort: {a: 1}}])

Antes do MongoDB 3.6, as chaves de ordenação são [3,1,5] e [3,4,0], respectivamente.

  • Os primeiros elementos dos dois arrays são iguais (3). Em seguida, os segundos elementos são comparados (1 < 4).

  • Consequentemente, o documento com _id: 0 é ordenado antes do documento com _id: 1.

Limites de ordenação composta em múltiplos campos de array no pipeline de agregação

A partir do MongoDB 3.6, ao ordenar em um pipeline de agregação, o MongoDB não consegue mais ordenar documentos que contenham arrays paralelos nos campos de ordenação. Arrays são considerados paralelos quando são elementos irmãos do objeto BSON. Arrays não são considerados paralelos nas seguintes situações:

  • As chaves de ordenação contêm arrays aninhados, como caminhos de campos com relações hierárquicas.

  • As chaves de ordenação compartilham o mesmo array como prefixo de caminho.

Nota

Esses limites sempre existiram no comando find. No entanto, find e aggregate compartilham a mesma semântica no MongoDB 3.6 e versões posteriores.

  • Exemplo 1: A ordenação é bem-sucedida quando existe um array aninhado.

    Uma coleção contém os seguintes documentos:

    {a: [ {b: [1, 2]}, {b: [3, 4]} ]}

    Execute a seguinte operação de agregação (a chave de ordenação é um campo de array aninhado):

    db.coll.aggregate([{$sort: {"a.b": 1}}])

    A operação é bem-sucedida porque a.b é um campo de array aninhado e não constitui arrays paralelos.

  • Exemplo 2: A ordenação é bem-sucedida quando as chaves de ordenação compartilham o mesmo array como prefixo.

    Uma coleção contém os seguintes documentos:

    {a: [{b: 1, c: 1}, {b: 2, c: 2}]}

    Execute a seguinte operação de agregação (as chaves de ordenação compartilham o mesmo array como prefixo):

    db.coll.aggregate([{$sort: {"a.b": 1, "a.c": 1}}])

    A operação é bem-sucedida porque a.b e a.c compartilham o prefixo a e não são considerados arrays paralelos.

  • Exemplo 3: Chaves de ordenação irmãs causam falha na ordenação.

    Uma coleção contém os seguintes documentos:

    { _id: 1, a: [ 1, 2 ], b: [ 1, 2 ]}
    { _id: 2, a: [ -3, 5 ], b: 0 }
    { _id: 3, a: [ -6, 12 ], b: 100 }

    Execute a seguinte operação de agregação (as chaves de ordenação são campos de array irmãos):

    db.coll.aggregate([ { $sort: {a: 1, b: 1} } ])

    O MongoDB não consegue ordenar pelos campos a e b simultaneamente porque são arrays irmãos e constituem arrays paralelos no documento com _id: 1. Para realizar uma ordenação composta em múltiplos campos de array, certifique-se de que os campos de ordenação sejam arrays aninhados ou compartilhem o mesmo array como prefixo, e evite usar tipos de array em campos irmãos no modelo de dados.

Atualizações em operações de update

Adição de novos campos

A partir do MongoDB 3.6, os campos adicionados durante operações de update são inseridos em ordem lexicográfica.

Por exemplo, uma coleção chamada coll contém o seguinte documento:

{ _id: 0, x: 0 }

Execute uma operação de update para adicionar os seguintes campos:

db.coll.update({_id: 0}, {$set: {b: 0, a: 0}})

No MongoDB 3.6, os novos campos são inseridos em ordem lexicográfica. Consequentemente, o documento atualizado é {_id: 0, x: 0, a: 0, b: 0}.

Antes do MongoDB 3.6, os novos campos eram inseridos na ordem em que apareciam no documento de update. Consequentemente, o documento atualizado era {_id: 0, x: 0, b: 0, a: 0}.

Campos com conflito com a sintaxe de identificadores do arrayFilters

A partir do MongoDB 3.6, campos cujo nome conflita com a sintaxe de identificadores de arrayFilters (como $[]) não podem mais ser atualizados.

Por exemplo, uma coleção chamada coll contém o seguinte documento:

{ _id: 0, x: { "$[]": 0 } }

Execute uma operação de update:

db.coll.update({_id: 0}, {$set: {"x.$[]": 1}})

A partir do MongoDB 3.6, uma operação de update falha porque o nome de campo $[] conflita com a sintaxe de identificadores de arrayFilters. Antes do MongoDB 3.6, essa operação era bem-sucedida.

Nota

Esse novo comportamento de update só se aplica quando featureCompatibilityVersion está definido como 3.6.

Validação mais rígida do operador $pop

A partir do MongoDB 3.6, os parâmetros do operador $pop devem ser definidos como um dos seguintes valores:

  • -1: remove o primeiro elemento de um array, ou

  • 1: remove o último elemento de um array.

Antes do MongoDB 3.6:

  • Números negativos para remover o primeiro elemento de um array, ou

  • Números não negativos ou valores não numéricos para remover o último elemento de um array.

Remoção do operador $pushAll

O MongoDB 3.6 remove o operador $pushAll (descontinuado desde o MongoDB 2.4).

Use os operadores $push e $each como alternativa. Exemplo:

db.students.update(
   { name: "joe" },
   { $push: { scores: { $each: [ 90, 92, 85 ] } } }
)

Alterações no suporte a plataformas

  • O MongoDB 3.6 não oferece mais suporte a versões do Windows anteriores ao Windows Server 2008 R2 e Windows 7.

  • O MongoDB 3.6 não foi testado no APFS, o novo sistema de arquivos do macOS 10.13+, e pode apresentar problemas de compatibilidade.

Atualizações gerais de compatibilidade

Descontinuação do mecanismo de autenticação MONGODB-CR

A partir do MongoDB 3.6, o MongoDB descontinua o mecanismo de autenticação MONGODB-CR. Caso ainda não tenha feito isso, atualize o esquema de autenticação MONGODB-CR para SCRAM.

Nós árbitros e sua prioridade

Todos os nós árbitros têm prioridade fixa de 0.

Descontinuação da arquitetura de replicação master-slave

O MongoDB 3.6 descontinua oficialmente a arquitetura de replicação master-slave.

Descontinuação da opção --nojournal para o mecanismo de armazenamento WiredTiger

O MongoDB 3.6 descontinua a opção --nojournal para membros de replica set que utilizam o mecanismo de armazenamento WiredTiger, evitando assim riscos de perda de dados.

Ajustes no comando aggregate e em sua saída

A partir do MongoDB 3.6, o comando aggregate não retorna mais resultados como um único documento.

Ao executar o comando aggregate, especifique uma das seguintes opções:

  • cursor: retorna os resultados como um cursor (indicado para grandes volumes de dados).

  • explain: retorna uma análise do plano de execução do pipeline de agregação.

Recomenda-se utilizar db.collection.aggregate() no mongo shell ou o método equivalente no driver correspondente. Esses métodos retornam um cursor por padrão, salvo quando a opção explain é utilizada.

Alterações na conversão de campos de data para strings em expressões de agregação

A partir do MongoDB 3.6, o MongoDB converte datas para strings com precisão de milissegundos, terminando com a letra 'Z' (indicando o fuso horário UTC), em expressões de agregação.

Exemplo:

// Documents.
{_id: 0, d: ISODate("2017-10-18T20:04:27.978Z")}
{_id: 1, d: ISODate("2017-10-18T20:04:28.192Z")}

// Query.
db.coll.aggregate({$project: {d: {$toLower: "$d"}}})

Antes do MongoDB 3.6, os campos de data nos dois documentos eram retornados como strings no formato "2017-10-18t20:04:27" e "2017-10-18t20:04:28".

A partir do MongoDB 3.6, os campos de data nos dois documentos são retornados como strings no formato "2017-10-18t20:04:27.978z" e "2017-10-18t20:04:28.192z" (incluindo milissegundos e 'z' em minúsculo).

Essas alterações se aplicam aos seguintes operadores de agregação:

  • $concat

  • $substr

  • $substrBytes

  • $substrCP

  • $strcasecmp

  • $toLower

  • $toUpper

Remoção de comandos e opções de diagnóstico de log

O MongoDB 3.6 remove os comandos descontinuados diagLogging e a opção mongod --diaglog.

Como alternativa, use a ferramenta mongoreplay para capturar, reproduzir e analisar comandos enviados ao seu deployment do MongoDB.

Alterações na operação validate

A partir do MongoDB 3.6, uma operação validate aciona obrigatoriamente um checkpoint e libera todos os dados em memória para o disco somente antes de executar uma validação de dados em disco.

Antes do MongoDB 3.6, o checkpoint era acionado obrigatoriamente independentemente do modo de validação utilizado.

Ao usar o comando validate ou o método db.collection.validate(), especifique explicitamente {full: true} para realizar uma validação completa.

Limites para nomes de índices

A partir do MongoDB 3.6:

  • Não é possível especificar * como nome de índice durante a criação.

  • Não é possível usar chaves de índice para excluir índices nomeados *. Use o nome de índice * para excluí-los.

Antes de atualizar para o MongoDB 3.6, execute as seguintes etapas:

  • Exclua os índices: exclua manualmente todos os índices existentes nomeados *.

  • Renomeie os índices: para mantê-los, exclua-os e reconstrua-os com novos nomes.

Opções descontinuadas

Alterações no MongoDB 3.6.1:

  • Descontinuação da opção de consulta snapshot.

    • Mecanismo de armazenamento MMAPv1: use hint({ _id: 1 }) para garantir que os documentos não sejam retornados mais de uma vez durante uma consulta, mesmo que escritas intermediárias causem a movimentação dos documentos.

    • Outros mecanismos de armazenamento (como WiredTiger): use hint({ $natural: 1 }) como alternativa.

  • Descontinuação do operador $isolated.

    • Alternativa: use transações ou ajuste os níveis de read concern para obter isolamento.

Recursos incompatíveis com versões posteriores

Os seguintes recursos novos do MongoDB 3.6 exigem que featureCompatibilityVersion esteja definido como "3.6":

  • UUID para coleções: cada coleção possui um identificador único.

  • Validação de documentos com $jsonSchema: oferece suporte à validação da estrutura de documentos no formato JSON Schema.

  • Change Streams: monitora eventos de alteração de dados em tempo real.

  • Chunk aware secondaries: otimiza a sincronização de dados em nós secundários de instâncias de sharded cluster.

  • Definições de views, validador de documentos e filtro de índice parcial: ative essa configuração ao usar novos recursos de consulta do MongoDB 3.6.

  • Sessions e retryable writes: oferece suporte a sessões de transação e retry automático de operações de escrita.

  • Restrições de autenticação para usuários e funções: gerencia permissões de usuários de forma granular.

Os valores padrão de featureCompatibilityVersion:

Use o comando db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } ) para visualizar o valor atual de featureCompatibilityVersion.

Para fazer downgrade a partir do MongoDB 3.6, limpe todos os dados incompatíveis, incluindo dados persistentes relacionados a sessions, change streams e UUID para coleções.