Diferenças de comportamento

Relevante apenas para a edição Enterprise do Cloud Firestore.

Esta página descreve as diferenças comportamentais entre o Cloud Firestore com compatibilidade com o MongoDB e o MongoDB.

Para ver uma análise detalhada dos recursos compatíveis dependendo da versão do MongoDB, consulte:

Conexões e bancos de dados

  • Cada conexão é limitada a um único banco de dados do Cloud Firestore com compatibilidade com o MongoDB.
  • É preciso criar um banco de dados antes de se conectar a ele.

Nomenclatura

As seguintes diferenças se aplicam à nomenclatura de partes do modelo de dados.

Coleções

  • Nomes de coleção que correspondem a __.*__ não são aceitos.

Campos

  • Nomes de campo que correspondem a __.*__ não são aceitos.
  • Não é possível usar nomes de campo vazios.

Documentos

  • O tamanho máximo do documento é 4 MiB.
  • A profundidade máxima de aninhamento de campos é 20. Cada campo do tipo matriz e objeto adiciona um nível à profundidade geral.

_id

  • O campo _id de nível superior precisa ser um ObjectId, String, número inteiro de 64 bits, número inteiro de 32 bits, Double, Binary ou Object. Outros tipos de BSON não são aceitos.

Valores

  • Os tipos JavaScript, Symbol, DBPointer e Undefined BSON não são compatíveis.

Data

  • Os valores de data precisam estar em [0001-01-01T00:00:00Z, 9999-12-31T23:59:59Z].

Decimal128

  • NaN, infinito positivo e infinito negativo são canonicalizados na gravação.
  • Operações aritméticas em Decimal128 não são aceitas.

Duplo

  • Os valores NaN são canonizados na gravação.

Expressão regular

  • As opções de expressão regular precisam ser válidas ("i", "m", "s", "u" ou "x") e fornecidas em ordem alfabética, sem repetições.

Consultas

  • A ordem de classificação natural (consultas sem uma classificação explícita) não corresponde à ordem de inserção ou à ordem por _id crescente.

Agregações

  • As agregações são limitadas a 250 etapas.
  • As etapas $merge e $out não são compatíveis. Consulte a seção comandos para ver uma lista completa de estágios e operadores compatíveis.
  • A etapa $lookup não é compatível com os campos let e pipeline.

Gravações

  • Não é possível criar documentos com nomes que começam com um cifrão ("$") usando o recurso de upsert do update ou do findAndModify.
  • Verifique se a string de conexão inclui retryWrites=false ou use o método adequado ao seu driver para garantir que ele não tente usar esse recurso. Não é possível repetir gravações.

Transações

  • O isolamento de snapshot e as transações serializáveis são compatíveis.

  • Por padrão, as transações usam controles de simultaneidade otimistas com isolamento de snapshot.

Ler preocupação

  • O Cloud Firestore com compatibilidade com o MongoDB é compatível com as consistências de leitura snapshot, majority e linearizable. O padrão é snapshot, que se refere ao isolamento de snapshot.

    Use linearizable quando o aplicativo exigir consistência estrita e precisar evitar anomalias de distorção de gravação. Para outras cargas de trabalho, snapshot pode melhorar o desempenho e reduzir a disputa de transações.

Nível de consistência de gravação

  • Somente w: 'majority' e w: 1 são compatíveis.

Preferência de leitura

  • Somente as consistências de leitura primary, primaryPreferred, primary_preferred, secondary_preferred e nearest são compatíveis.

Índices

  • Não há suporte para índices com caracteres curinga.
  • O Cloud Firestore com compatibilidade com o MongoDB não cria automaticamente um índice em _id, mas garante que os valores de _id sejam exclusivos em uma coleção.
  • Os índices sem várias chaves ativadas não são mudados automaticamente para índices de várias chaves com base em operações de gravação. Você precisa ativar a opção de várias chaves ao criar o índice, e ela não pode ser alterada.

Erros

  • Os códigos de erro e as mensagens podem ser diferentes entre o Cloud Firestore com compatibilidade com o MongoDB e o MongoDB.

Comandos

As seguintes diferenças de comportamento se aplicam a comandos específicos.

  • Os comandos não listados nas tabelas a seguir não são compatíveis.
  • maxTimeMS é aceito pela maioria dos comandos, mas pode ser ignorado.

Consultas e gravações

Comando Campos sem suporte

find

  • comment
  • readConcern
  • max
  • min
  • returnKey
  • showRecordId
  • tailable
  • oplogReplay
  • noCursorTimeout
  • awaitData
  • allowPartialResults
  • collation
  • allowDiskUsage
  • let

aggregate

  • bypassDocumentValidation
  • readConcern
  • collation
  • hint
  • comment
  • let

insert

  • bypassDocumentValidation
  • comment

update

  • collation
  • arrayFilters
  • hint

delete

  • comment
  • write

Em uma instrução de exclusão:

  • collation
  • hint

findAndModify

  • fields
  • bypassDocumentValidation
  • collation
  • arrayFilters
  • hint
  • comment
  • let

count

  • hint
  • readConcern
  • collation
  • comment

distinct

  • readConcern
  • collation
  • comment
  • hint

getMore

  • comment

killCursors

(nenhum)

Transações e sessões

Comando Campos sem suporte

commitTransaction

  • comment

abortTransaction

  • comment

endSessions

(nenhum)

Administração

Comando Campos sem suporte Observações

listDatabases

  • authorizedDatabases
  • comment
filter precisa estar vazio, se fornecido.

listCollections

  • comment
authorizedCollections precisa ser "false", se fornecido.

listIndexes

  • comment

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • writeConcern
  • encryptedFields
  • comment
Esse comando não faz nada.

capped precisa ser "false", se fornecido.

A seguir