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érica Precisão dupla de 64 bits, IEEE 754.
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érica 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"}

NaN Nenhum
Nulo Nenhuma
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 NaN
  4. Valores de inteiros e ponto flutuante, classificados em ordem numérica
  5. Valores de data
  6. Valores de string de texto
  7. Valores de byte
  8. Referências do Firestore
  9. Valores de ponto geográfico
  10. Valores de matriz
  11. Embeddings vetoriais
  12. Valores de mapa