Diferenças de comportamento

Nesta página, descrevemos as diferenças comportamentais entre o Firestore com compatibilidade com o MongoDB e o MongoDB.

Para conferir uma lista dos recursos compatíveis com cada 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.
  • Um banco de dados precisa ser criado antes de se conectar a ele.

Nomenclatura

As diferenças a seguir se aplicam a partes de nomenclatura do modelo de dados.

Coleções

  • Não é possível usar nomes de coleções que correspondam a __.*__.

Campos

  • Não é possível usar nomes de campo correspondentes a __.*__.
  • 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 _id do documento (campo de nível superior) precisa ser um ObjectId, uma string ou um número inteiro de 64 bits. Outros tipos de BSON não são compatíveis.
  • Não há suporte para string vazia ("") e 0 de 64 bits (0L).

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

  • Os valores NaN, infinito positivo e infinito negativo são canonizados na gravação.
  • As 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 em ordem crescente.

Agregações

  • As agregações são limitadas a 250 etapas.
  • As fases $merge e $out não são compatíveis. Consulte a seção comandos para conferir uma lista completa de estágios e operadores com suporte.

Gravações

  • Não é possível criar documentos com nomes que começam com um cifrão ("$") usando o recurso de inserção e atualização de update ou findAndModify.
  • Verifique se a string de conexão inclui retryWrites=false (ou use o método apropriado para o driver) para garantir que o driver não tente usar esse recurso. Não há suporte para gravações revogáveis.

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 bloqueio, limite a quantidade de dados lidos em uma transação.

Índices

  • Índices de caracteres curinga não são aceitos.
  • Não é possível usar índices exclusivos
  • O Firestore com compatibilidade do 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 chaves múltiplas ativadas não são alterados automaticamente para índices de chaves múltiplas com base nas operações de gravação. É necessário ativar a chave múltipla ao criar o índice, e a opção não pode ser alterada.

Ler preocupação

  • Somente o nível de preocupação de leitura majority é aceito.

Gravar preocupação

  • Somente as preocupações de gravação w: 'majority' e w: 1 são aceitas.

Preferência de leitura

  • Somente as questões de leitura primary, primaryPreferred, primary_preferred, secondary_preferred e nearest são compatíveis.

Erros

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

Comandos

As diferenças de comportamento a seguir 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 falso 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 falso se fornecido.

A seguir