Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

Alterações de compatibilidade no MongoDB 9.0

Esta página descreve as alterações introduzidas no MongoDB 9.0 que podem afetar a compatibilidade com versões mais antigas do MongoDB.

Obsoleto(a)
Descrição

prefixPreview, suffixPreview , substringPreview

A partir do MongoDB 9.0, os tipos de query prefixPreview, suffixPreview e substringPreview que usam o algoritmo text foram descontinuados e removidos. Use os tipos de query prefix, suffix ou substring com o algoritmo string em vez disso.

fleDisableSubstringPreviewParameterLimits

Você não pode substituir os limites internos em queries de substring em campos criptografados no MongoDB 9.0.

A partir do MongoDB 9.0, o estágio $group retorna um erro se uma expressão de acumulador tiver um nome de campo vazio. Para obter detalhes, consulte Restrição de $group de nome de campo vazio.

A partir do MongoDB 9.0, a chave $queryStats para comandos aggregate inclui a opção allowPartialResults quando a opção é definida explicitamente. As estatísticas de query podem então distinguir entre solicitações em que allowPartialResults é omitido, explicitamente true ou explicitamente false.

A adição altera a serialização de key e keyHash para query aggregate que definem allowPartialResults. O queryShapeHash permanece inalterado. Consumidores downstream que correspondem a keyHash podem observar valores diferentes para essas query.

Para obter mais informações, consulte a forma de query do comando aggregate.

A partir do MongoDB 9.0, se um campo indexado se tornar um campo multikey enquanto uma query que faz referência ao campo estiver em execução, a query poderá falhar com um QueryKilledError. Um campo indexado torna-se multikey quando você insere ou atualiza um documento para que o campo contenha um valor de array.

Se sua query falhar com este erro, execute a query novamente após a conclusão da operação de inserção ou atualização.

A partir do MongoDB 9.0, um fluxo de alterações aberto com uma readPreference de primary ou secondary retorna o erro retomável InterruptedDueToReplStateChange (código de erro 11602) de getMore se uma eleição de conjunto de réplicas alterar a função do nó para que ele não satisfaça mais a preferência de leitura. Em versões anteriores, o cursor continuava retornando resultados do mesmo nó.

Os drivers compatíveis e mongos retomam automaticamente a partir do último token de retomada. Loops getMore manuais e mongosh devem ser retomados com resumeAfter. Para obter detalhes, consulte Retomar um Change Stream.

A partir do MongoDB 9.0, as falhas de extração de chave de índice 2dsphere retornam os códigos de erro nomeados 510 (GeoKeyExtractionFailed) e 511 (GeoKeyExtractionFailedTimeseries). Esses códigos substituem os códigos de asserção anteriores 16755 e 16756 para índices 2dsphere regulares e 183934 e 183493 para coleção de séries temporais. Se o seu aplicativo corresponder aos códigos anteriores, atualize-o para corresponder a 510 e 511.

A partir do MongoDB 9.0, ao renomear uma coleção entre diferentes bancos de dados em um conjunto de réplicas, o comando renameCollection mantém um bloqueio exclusivo nas coleções de origem e destino. O bloqueio dura toda a operação e bloqueia operações DDL e gravações em ambas as coleções. A maioria das operações de leitura usa leituras sem bloqueio e não são bloqueadas.

Versões anteriores liberavam o bloqueio da coleção de origem antes que renameCollection concluísse a renomeação. Uma gravar simultânea na coleção de origem durante essa janela poderia ser perdida.

A alteração afeta apenas conjuntos de réplicas. Os clusters sharded já aplicam bloqueio a ambas as coleções durante a renomeação.

A partir do MongoDB 9.0, o JavaScript do lado do servidor é executado em um mecanismo baseado em WebAssembly (WASM) que avalia operações locais Date em UTC, independentemente da zona horária do host mongod. Em versões anteriores, essas operações observavam o fuso horário do hospedar. A alteração afeta o JavaScript que é executado em $function, $accumulator, $where e mapReduce.

O valor de data BSON armazenar permanece inalterado, assim como as operações UTC, como Date.prototype.getTime(), Date.prototype.toISOString() e os métodos getUTC*(). A diferença afeta as operações de horário local:

  • Date.prototype.toString()

  • Date.prototype.toTimeString()

  • Date.prototype.getHours() e outros getters locais

  • Construtores e setters de Date local

  • Operações que convertem implicitamente datas em strings, incluindo Array.prototype.sort() chamado sem um comparador

Considere as seguintes operação em um mongod que executar com TZ=America/New_York:

db.events.insertOne( { name: "before-opening", occurredAt: ISODate("2024-01-15T13:30:00Z")} ) db.events.find( { $expr: { $function: { body: function(date) { return date.getHours() < 9; }, args: [ "$occurredAt" ], lang: "js" } }} )

Em versões anteriores, 13:30 UTC é 08:30 em Nova York, portanto, getHours() retorna 8 e a query corresponde ao documento. A partir do MongoDB 9.0, getHours() retorna 13 e a query não corresponde. A operação é bem-sucedida em ambas as versões porque a data armazenada permanece válida, portanto, a diferença não é relatada como um erro. Implantações que executam versões binárias mistas podem retornar resultados diferentes para o mesmo JavaScript.

Antes de atualizar para o MongoDB 9.0, revise o JavaScript em seu código $function, $accumulator, $where e mapReduce para uso local de Date e não dependa da zona horária do hospedar mongod.

Para avaliar datas em uma zona nomeada, use um operador de data de agregação com um argumento timezone explícito em vez de JavaScript. A query a seguir retorna os mesmos resultados em todas as versões:

db.events.find( { $expr: { $lt: [ { $hour: { date: "$occurredAt", timezone: "America/New_York" } }, 9 ] }} )

Para JavaScript que requer comparação ou serialização determinística, use getTime(), toISOString() ou os métodos getUTC*() em vez de métodos Date locais ou conversão implícita de string. Passe um comparador explícito para Array.prototype.sort() quando os valores classificados puderem conter datas.

Para aprender mais, consulte JavaScript do lado do servidor.

A partir do MongoDB 9.0, o JavaScript do lado do servidor não está disponível na arquitetura ppc64le. Os binários mongod e mongos para ppc64le não incluem um mecanismo JavaScript. Como resultado, as operação $function, $accumulator, $where e mapReduce falham nessa arquitetura. Versões anteriores executar essas operação em ppc64le.

Você não pode habilitar JavaScript no lado do servidor no ppc64le com uma configuração de arquivo de configuração ou uma opção de linha de comando.

Antes de atualizar uma implantação de ppc64le para o MongoDB 9.0, identifique os aplicativos que usam $function, $accumulator, $where ou mapReduce. Reescreva essas operações para usar fases do pipeline de agregação e operadores que não exigem JavaScript no lado do servidor. Você também pode executar as operação em uma implantação que usa uma arquitetura diferente.

Para aprender mais, consulte JavaScript do lado do servidor.

O MongoDB 9.0 marca a GA de queries de prefixo, sufixo e substring em campos de string criptografados em coleções com Queryable Encryption habilitado. O recurso GA é incompatível com a versão Public Preview lançada no MongoDB 8.2, que não deve ser usada agora que o recurso está em GA.

Para usar query de prefixo, sufixo ou substring com Queryable Encryption, o MongoDB deve ser a versão 9.0 ou posterior, com driver 9.0 compatível. Se você ainda estiver usando a Public Preview, o MongoDB deve permanecer na versão 8.2 ou 8.3, com 8.2 ou 8.3 drivers compatíveis.

Os drivers MongoDB 9.0 podem descriptografar dados criados com drivers MongoDB 8.2 ou 8.3. Para opções de atualização, consulte as seções a seguir.

Se possível, crie novas coleções em vez de migrar coleções criadas com a funcionalidade de Visualização Pública:

  1. Atualize o servidor MongoDB e drivers para o 9.0.

  2. Configure uma nova coleção criptografada com um nome diferente da coleção anterior.

  3. Insira novos dados ou uma versão não criptografada dos dados existentes se você tiver uma cópia local.

  4. Descarte a coleção anterior.

Se você não puder usar novos dados ou não tiver uma versão não criptografada dos dados existentes:

  1. Atualize o servidor MongoDB e os drivers para o 9.0

  2. Utilizando um driver compatível com 9.0, query a coleção criptografada para descriptografá-la.

  3. Salve a saída localmente.

  4. Configure uma nova coleção criptografada e ingira os dados.

Aviso

  • As operações mongoexport e mongodump não descriptografam a coleção. Você deve executar a query da coleção de um driver para produzir os dados descriptografados.

  • Os drivers compatíveis com o MongoDB 9.0 não podem executar queries de campos criptografados em dados criptografados para o MongoDB 8.2 Tipos de query de Visualização Pública. Para descriptografar dados, query um campo não criptografado ou query a coleção inteira.

As seções a seguir fornecem informações para remover recursos incompatíveis com versões anteriores de sua implantação. Se você estiver fazendo o downgrade do MongoDB 9.0 para uma versão anterior, revise as seções a seguir para garantir que sua implantação seja executada corretamente após o downgrade.

No MongoDB 9.0, $convert pode converter um objeto para binData. Para obter detalhes, consulte Converter um objeto para binData.

Se você criar uma visualização que usa essa conversão, as queries nessa visualização retornarão um erro após o downgrade para uma versão anterior.

Antes de fazer o downgrade do 9.0, atualize ou descarte quaisquer visualizações que usem essa conversão.