Tipi di dati supportati

Questa pagina descrive i tipi di dati supportati da Firestore.

Tipi di dati

La seguente tabella elenca i tipi di dati supportati da Firestore. Descrive anche l'ordine di ordinamento utilizzato per confrontare i valori dello stesso tipo:

Tipo di dati Ordinamento Note
Array Per valori elemento

Un array non può contenere un altro valore di array come uno dei suoi elementi.

All'interno di un array, gli elementi mantengono la posizione assegnata. Quando vengono ordinati due o più array, questi vengono ordinati in base ai valori degli elementi.

Quando vengono confrontati due array, vengono confrontati i primi elementi di ciascun array. Se i primi elementi sono uguali, vengono confrontati i secondi elementi e così via finché non viene trovata una differenza. Se un array esaurisce gli elementi da confrontare, ma è uguale fino a quel punto, l'array più corto viene ordinato prima dell'array più lungo.

Ad esempio, [1, 2, 3] < [1, 2, 3, 1] < [2]. L'array [2] ha il valore del primo elemento più alto. L'array [1, 2, 3] ha elementi uguali ai primi tre elementi di [1, 2, 3, 1], ma è più corto.

Booleano false < true
Byte Ordine dei byte Fino a 1.048.487 byte (1 MiB - 89 byte). Solo i primi 1500 byte vengono presi in considerazione dalle query.
Data e ora Cronologica Se memorizzato in Firestore, è preciso solo fino ai microsecondi; qualsiasi precisione aggiuntiva viene arrotondata per difetto.
Numero in virgola mobile Numerico Doppia precisione a 64 bit secondo lo standard IEEE 754, inclusi NaN e +/-Infinity (normalizzati).
Punto geografico Per latitudine, poi per longitudine Al momento non consigliamo di utilizzare questo tipo di dati a causa delle limitazioni delle query. In genere è meglio memorizzare la latitudine e la longitudine come campi numerici separati. Se la tua app ha bisogno di semplici query geografiche basate sulla distanza, consulta Query geografiche.
Numero intero Numerico 64 bit, firmato
Mappa Per chiavi, poi per valore

Rappresenta un oggetto incorporato in un documento. Una volta indicizzati, puoi eseguire query sui sottocampi. Se escludi questo valore dall'indicizzazione, anche tutti i campi secondari vengono esclusi dall'indicizzazione.

L'ordine delle chiavi è sempre ordinato. Ad esempio, se scrivi {c: "foo", a: "bar", b: "qux"} la mappa viene ordinata per chiave e salvata come {a: "bar", b: "qux", c: "foo"}.

I campi della mappa vengono ordinati per chiave e confrontati in base alle coppie chiave-valore, prima confrontando le chiavi e poi i valori. Se le prime coppie chiave-valore sono uguali, vengono confrontate le coppie chiave-valore successive e così via. Se due mappe hanno le stesse coppie chiave-valore, viene presa in considerazione la lunghezza della mappa. Ad esempio, le seguenti mappe sono in ordine 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"}

Null Nessuno
Riferimento Per elementi del percorso (raccolta, ID documento, raccolta, ID documento...) Ad esempio, projects/[PROJECT_ID]/databases/[DATABASE_ID]/documents/[DOCUMENT_PATH].
Stringa di testo Ordine dei byte codificato UTF-8 Fino a 1.048.487 byte (1 MiB - 89 byte). Le query prendono in considerazione solo i primi 1500 byte della rappresentazione UTF-8.
Vettoriale Per dimensione e poi per valori dei singoli elementi La dimensione massima supportata per l'incorporamento è 2048. Per memorizzare i vettori con dimensioni maggiori, utilizza la riduzione della dimensionalità.

Ordinamento del tipo di valore

Quando una query coinvolge un campo con valori di tipi misti, Firestore utilizza un ordinamento deterministico basato sulle rappresentazioni interne. Il seguente elenco mostra l'ordine:

  1. Valori null
  2. Valori booleani
  3. Valori interi e in virgola mobile, ordinati in ordine numerico
  4. Valori di data
  5. Valori delle stringhe di testo
  6. Valori byte
  7. Riferimenti a Firestore
  8. Valori in punti geografici
  9. Valori di array
  10. Vector embedding
  11. Valori mappa

Ordinamento numerico

Firestore ordina tutti i valori numerici (Integer e Floating point) interlacciati tra loro. Il confronto in virgola mobile segue l'ordinamento totale di IEEE 754 con l'eccezione notevole che Firestore normalizza tutti i valori NaN e li considera inferiori a -Infinity.