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 das funcionalidades suportadas consoante a versão do MongoDB, consulte:

Associações e bases de dados

  • Cada associação está limitada a uma única base de dados do Firestore com compatibilidade com o MongoDB.
  • Tem de criar uma base de dados antes de estabelecer ligação à mesma.

Atribuição de nomes

As seguintes diferenças aplicam-se à atribuição de nomes a partes do seu modelo de dados.

Coleções

  • Não são suportados nomes de coleções que correspondam a __.*__.

Campos

  • Os nomes dos campos que correspondem a __.*__ não são suportados.
  • Os nomes de campos vazios não são suportados.

Documentos

  • O tamanho máximo do documento é de 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 documento _id (campo de nível superior) tem de ser um ObjectId, uma string ou um número inteiro de 64 bits. Outros tipos de BSON não são suportados.
  • A string vazia ("") e o 0 de 64 bits (0L) não são suportados.

Valores

  • Os tipos JavaScript, Symbol, DBPointer e Undefined BSON não são suportados.

Data

  • Os valores de data têm de estar compreendidos entre [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 suportadas.

Duplo

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

Expressão regular

  • As opções de expressões regulares têm de ser válidas ("i", "m", "s", "u" ou "x") e fornecidas por ordem alfabética sem repetições.

Consultas

  • A ordem de ordenação natural (consultas sem uma ordenação explícita) não corresponde à ordem de inserção nem à ordenação por _id ascendente.

Agregações

  • As agregações estão limitadas a 250 fases.
  • As fases $merge e $out não são suportadas. Consulte a secção Comandos para ver uma lista completa de fases e operadores suportados.
  • A fase $lookup não suporta os campos let e pipeline.

Escreve

  • Não é possível criar documentos com nomes que comecem por um cifrão ("$") através da funcionalidade de inserção/atualização de update ou findAndModify.
  • Certifique-se de que a string de ligação inclui retryWrites=false (ou use o método adequado ao seu controlador) para se certificar de que o controlador não tenta usar esta funcionalidade. As escritas repetíveis não são suportadas.

Transações

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

  • Por predefinição, as transações usam controlos de simultaneidade otimistas com isolamento de instantâneos.

Ler preocupação

  • O Firestore com compatibilidade com o MongoDB suporta as preocupações de leitura snapshot, majority e linearizable. A predefinição é snapshot, que se refere ao isolamento de instantâneo.

    Use linearizable quando a aplicação requer uma consistência rigorosa e tem de impedir anomalias de desvio de escrita. Para outras cargas de trabalho, o snapshot pode melhorar o desempenho e reduzir a contenção de transações.

Escrever preocupação

  • Apenas são suportados os write concerns w: 'majority' e w: 1.

Preferência de leitura

  • Apenas são suportadas as preocupações de leitura primary, primaryPreferred, primary_preferred, secondary_preferred e nearest.

Índices

  • Os índices com carateres universais não são suportados.
  • O Firestore com compatibilidade com o MongoDB não cria automaticamente um índice em _id, mas garante que os valores de _id são únicos numa coleção.
  • Os índices sem várias chaves ativadas não são alterados automaticamente para índices de várias chaves com base nas operações de escrita. Tem de ativar a opção de várias teclas quando criar o índice, e não é possível alterar a opção.

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 seguintes diferenças de comportamento aplicam-se a comandos específicos.

  • Os comandos não listados nas tabelas seguintes não são suportados.
  • maxTimeMS é aceite pela maioria dos comandos, mas pode ser ignorado.

Consultas e escritas

Command Campos não suportados

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

Numa declaração de eliminaçã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

Command Campos não suportados

commitTransaction

  • comment

abortTransaction

  • comment

endSessions

(nenhum)

Administração

Command Campos não suportados Notes

listDatabases

  • authorizedDatabases
  • comment
O elemento filter tem de estar vazio, se for fornecido.

listCollections

  • comment
authorizedCollections tem de 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
Este comando não tem efeito.

capped tem de ser falso se for fornecido.

O que se segue?