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:
- Recursos compatíveis: 8.0
- Recursos compatíveis: 7.0
- Recursos compatíveis: 6.0
- Recursos compatíveis: 5.0
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 dofindAndModify
. - 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'
ew: 1
são compatíveis.
Preferência de leitura
- Somente as consistências de leitura
primary
,primaryPreferred
,primary_preferred
,secondary_preferred
enearest
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 |
---|---|
|
|
|
|
|
|
|
|
|
Em uma instrução de exclusão:
|
|
|
|
|
|
|
|
|
|
(nenhum) |
Transações e sessões
Comando | Campos sem suporte |
---|---|
|
|
|
|
|
(nenhum) |
Administração
Comando | Campos sem suporte | Observações |
---|---|---|
|
|
filter precisa estar vazio se for fornecido. |
|
|
authorizedCollections precisa ser falso se for fornecido. |
|
|
|
|
|
Esse comando não faz nada.capped precisa ser "false" se for fornecido. |
A seguir
- Execute o Guia de início rápido: criar e se conectar a um banco de dados.
- Para uma lista completa dos recursos compatíveis, consulte Tipos de dados, drivers e recursos do MongoDB com suporte.