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

_id

  • O campo _id de nível superior tem de ser um ObjectId, uma string, um número inteiro de 64 bits, um número inteiro de 32 bits, um número de vírgula flutuante de precisão dupla, um binário ou um objeto. Outros tipos de BSON 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 canonicalizados na gravação.

Expressão regular

  • As opções de expressão regular 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 com 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 cria o índice, e não é possível alterá-la.

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?