Diferenças de comportamento

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

Para 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 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 Array e Object adiciona um nível à profundidade geral.

_id

  • O documento _id (campo de nível superior) precisa ser um ObjectId, uma string ou um inteiro de 64 bits. Outros tipos de BSON não são compatíveis.
  • String vazia ("") e 0 de 64 bits (0L) não são compatíveis.

Valores

  • Os tipos BSON JavaScript, Symbol, DBPointer e Undefined 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.

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

  • As transações de snapshot não são compatíveis.
  • As transações usam controles de simultaneidade pessimistas com bloqueio. Para evitar a contenção de bloqueios, limite a quantidade de dados lidos em uma transação.

Índices

  • Não há suporte para índices curinga.
  • Não é possível usar índices exclusivos
  • O 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.

Ler dados de preocupação

  • Somente o nível de consistência de leitura majority é compatível.

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.

Erros

  • Os códigos e mensagens de erro podem ser diferentes entre o 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 for fornecido.

listCollections

  • comment
authorizedCollections precisa ser falso se for 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 for fornecido.

A seguir