Tipos de dados suportados

Esta página descreve os tipos de dados que o Firestore suporta.

Tipos de dados

A tabela seguinte apresenta os tipos de dados suportados pelo Firestore. Também descreve a ordem de ordenação usada quando se comparam valores do mesmo tipo:

Tipo de dados Ordenação Notas
Matriz Por valores dos elementos

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

Numa matriz, os elementos mantêm a posição que lhes foi atribuída. Quando ordena duas ou mais matrizes, as matrizes são ordenadas com base nos valores dos respetivos elementos.

Quando compara duas matrizes, os primeiros elementos de cada matriz são comparados. Se os primeiros elementos forem iguais, os segundos elementos são comparados e assim sucessivamente até ser encontrada uma diferença. Se uma matriz ficar sem elementos para comparar, mas for igual até esse ponto, a matriz mais curta é 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 é mais curta.

Booleano false < true
Bytes Ordem dos bytes Até 1 048 487 bytes (1 MiB - 89 bytes). As consultas só consideram os primeiros 1500 bytes.
Data e hora Cronológico Quando armazenado no Firestore, é preciso apenas até microssegundos. Qualquer precisão adicional é arredondada para baixo.
Número de vírgula flutuante Numérico Precisão dupla de 64 bits de acordo com a norma IEEE 754, incluindo (normalizada) NaN e +/-Infinity.
Ponto geográfico Por latitude e, em seguida, por longitude Neste momento, não recomendamos a utilização deste tipo de dados devido a limitações de consultas. Geralmente, é melhor armazenar a latitude e a longitude como campos numéricos separados. Se a sua app precisar de geoconsultas simples baseadas na distância, consulte o artigo Geoconsultas
Número inteiro Numérico 64 bits, assinado
Mapa Por chaves e, em seguida, por valor

Representa um objeto incorporado num documento. Quando indexados, pode consultar subcampos. Se excluir este valor da indexação, todos os subcampos também são excluídos da indexação.

A ordenação das chaves é sempre feita. Por exemplo, se escrever {c: "foo", a: "bar", b: "qux"}, o mapa é ordenado por chave e guardado como {a: "bar", b: "qux", c: "foo"}.

Os campos de mapa são ordenados por chave e comparados por pares de chave-valor, comparando primeiro as chaves e, em seguida, os valores. Se os primeiros pares de chave-valor forem iguais, os pares de chave-valor seguintes são comparados e assim sucessivamente. Se dois mapas tiverem todos os mesmos pares de chave-valor, é considerada a duração do mapa. Por exemplo, os seguintes mapas estão por ordem ascendente:

{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, ID do documento, coleção, ID do documento...) Por exemplo, projects/[PROJECT_ID]/databases/[DATABASE_ID]/documents/[DOCUMENT_PATH].
String de texto Ordem dos bytes codificada em UTF-8 Até 1 048 487 bytes (1 MiB - 89 bytes). As consultas só consideram os primeiros 1500 bytes da representação UTF-8.
Vetor Por dimensão e, em seguida, por valores de elementos individuais A dimensão máxima de incorporação suportada é 2048. Para armazenar vetores com dimensões maiores, use a redução da dimensionalidade.

Ordenação do tipo de valor

Quando uma consulta envolve um campo com valores de tipos mistos, o Firestore usa uma ordenação determinística com base nas representações internas. A seguinte lista mostra a ordem:

  1. Valores nulos
  2. Valores booleanos
  3. Valores inteiros e de vírgula flutuante, ordenados por ordem numérica
  4. Valores de data
  5. Valores de strings de texto
  6. Valores de bytes
  7. Referências do Firestore
  8. Valores de pontos geográficos
  9. Valores de matriz
  10. Incorporações de vetores
  11. Mapeie valores

Ordenação numérica

O Firestore ordena todos os valores numéricos (Integer e Floating point) intercalados entre si. A comparação de pontos flutuantes segue a ordenação total da norma IEEE 754, com a exceção notável de que o Firestore normaliza todos os valores NaN e considera-os inferiores a -Infinity.