Tipos de dados compatíveis

Veja nesta página os tipos de dados compatíveis com o Firestore.

Tipos de dados

A tabela a seguir lista os tipos de dados compatíveis com o Firestore. Também descreve a ordem de classificação usada ao comparar valores do mesmo tipo:

Tipo de dados Ordem de classificação Observações
Matriz Por valores de elemento

Uma matriz não pode conter outro valor de matriz como um de seus elementos.

Dentro de uma matriz, os elementos mantêm a posição atribuída a eles. Ao classificar duas ou mais matrizes, elas são ordenadas com base nos seus valores de elemento.

Ao comparar duas matrizes, os primeiros elementos de cada uma delas são comparados. Se os primeiros elementos forem iguais, os segundos elementos serão comparados, e assim por diante, até que uma diferença seja encontrada. Se uma matriz ficar sem elementos para comparar, mas for igual até esse ponto, a matriz mais curta será ordenada antes da matriz mais longa.

Por exemplo, [1, 2, 3] < [1, 2, 3, 1] < [2]. A matriz [2] tem o maior valor do primeiro elemento. A matriz [1, 2, 3] tem elementos iguais aos três primeiros elementos de [1, 2, 3, 1], mas é menor em comprimento.

Booleano false < true
Bytes Ordem de bytes Até 1.048.487 bytes (1 MiB — 89 bytes). Somente os primeiros 1.500 bytes são considerados nas consultas.
Data e hora Cronológica Quando armazenados no Firestore, têm precisão apenas para microssegundos. Qualquer precisão adicional é arredondada para baixo.
Número de ponto flutuante Numérico Precisão dupla de 64 bits de acordo com o IEEE 754, incluindo NaN e +/-Infinity (normalizados).
Ponto geográfico Por latitude e depois longitude No momento, não recomendamos usar esse tipo de dados devido às limitações da consulta. Geralmente, é preferível armazenar a latitude e a longitude como campos numéricos separados. Se o app precisa de consultas geográficas com base na distância, consulte Consultas geográficas.
Número inteiro Numérico 64 bits, assinado.
Mapa Por chaves e, em seguida, por valor

Representa um objeto incorporado em um documento. Quando indexado, é possível consultar subcampos. Se você excluir esse valor da indexação, todos os subcampos também serão excluídos.

A ordenação das chaves é sempre classificada. Se você gravar {c: "foo", a: "bar", b: "qux"}, por exemplo, o mapa é classificado por chave e salvo como {a: "bar", b: "qux", c: "foo"}.

Os campos do mapa são classificados por chave e comparados por pares de chave-valor, primeiro comparando as chaves e, em seguida, os valores. Se os primeiros pares de chave-valor forem iguais, os próximos pares serão comparados e assim por diante. Se dois mapas tiverem todos os mesmos pares de chave-valor, o tamanho será considerado. Por exemplo, os mapas a seguir estão em ordem crescente:

{a: "aaa", b: "baz"}
{a: "foo", b: "bar"}
{a: "foo", b: "bar", c: "qux"}
{a: "foo", b: "baz"}
{b: "aaa", c: "baz"}
{c: "aaa"}

Nulo Nenhum
Referência Por elementos do caminho (coleção, código do documento, coleção, código do documento…) Por exemplo, projects/[PROJECT_ID]/databases/[DATABASE_ID]/documents/[DOCUMENT_PATH].
String de texto Ordem de bytes codificada em UTF-8 Até 1.048.487 bytes (1 MiB — 89 bytes). Somente os primeiros 1.500 bytes da representação UTF-8 são considerados nas consultas.
Vetor Por dimensão e depois por valores de elementos individuais A dimensão de incorporação máxima compatível é 2048. Para armazenar vetores com dimensões maiores, use redução de dimensionalidade.

Ordem de tipo de valor

Quando uma consulta envolve um campo com valores de tipos mistos, o Firestore usa uma ordem determinista com base nas representações internas. Veja a ordem na lista a seguir:

  1. Valores nulos
  2. Valores booleanos
  3. Valores de inteiros e ponto flutuante, classificados em ordem numérica
  4. Valores de data
  5. Valores de string de texto
  6. Valores de byte
  7. Referências do Firestore
  8. Valores de ponto geográfico
  9. Valores de matriz
  10. Embeddings de vetor
  11. Valores de mapa

Ordenação numérica

O Firestore classifica todos os valores numéricos (Integer e Floating point) entrelaçados. A comparação de ponto flutuante segue a ordenação total do IEEE 754, com a exceção notable de que o Firestore normaliza todos os valores de NaN e os considera menores que -Infinity.