支援的資料類型

本頁說明 Firestore 支援的資料類型。

資料類型

下表列出 Firestore 支援的資料類型。此外,本文也說明比較相同類型的值時使用的排序順序:

資料類型 排列順序 附註
陣列 依元素值

陣列不能包含其他陣列值做為元素。

在陣列中,元素會維持所指派的位置。 排序兩個以上的陣列時,系統會根據元素值排序陣列。

比較兩個陣列時,系統會比較每個陣列的第一個元素。如果第一個元素相等,則會比較第二個元素,依此類推,直到找到差異為止。如果陣列比較到最後一個元素,但到目前為止都相同,則較短的陣列會排在較長的陣列前面。

例如 [1, 2, 3] < [1, 2, 3, 1] < [2]。陣列 [2] 的第一個元素值最大。陣列 [1, 2, 3] 的元素等於 [1, 2, 3, 1] 的前三個元素,但長度較短。

布林值 false < true
位元組 位元組順序 最多 1,048,487 個位元組 (1 MiB - 89 個位元組)。查詢只會考量前 1,500 個位元組。
日期與時間 依時間順序 儲存在 Firestore 中時,精確度只計算到微秒;無條件捨去任何其他精準度。
浮點數 數字 根據 IEEE 754 的 64 位元雙精確度,包括 (正規化) NaN+/-Infinity
地理點 先依照緯度,然後依照經度 目前不建議使用這類資料,因為查詢功能有限。一般來說,建議將經緯度儲存為個別的數值欄位。如果應用程式需要簡單的距離型地理查詢,請參閱「地理查詢」。
整數 數字 64 位元,帶正負號
地圖 依鍵排序,然後依值排序

代表文件中嵌入的物件。如有建立索引,可以查詢子欄位。若在建立索引時排除此值,也會一併排除所有子欄位。

鍵的順序一律會經過排序。舉例來說,如果您寫入 {c: "foo", a: "bar", b: "qux"},地圖會依鍵排序,並儲存為 {a: "bar", b: "qux", c: "foo"}

地圖欄位會依鍵排序,並依鍵/值組合比較,先比較鍵,再比較值。如果第一個鍵/值組合相等,系統會比較下一個鍵/值組合,依此類推。如果兩個對應具有所有相同的鍵/值配對,系統會考量對應長度。舉例來說,下列地圖是按遞增順序排列:

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

空值
參考資料 按路徑元素 (集合、文件 ID、集合、文件 ID...) 例如 projects/[PROJECT_ID]/databases/[DATABASE_ID]/documents/[DOCUMENT_PATH]
文字字串 UTF-8 編碼位元組順序 最多 1,048,487 個位元組 (1 MiB - 89 個位元組)。查詢只會考量 UTF-8 表示法的前 1,500 個位元組。
向量 依維度,然後依個別元素值 支援的嵌入維度上限為 2048。如要儲存維度較大的向量,請使用降維

值類型排序

查詢含混合類型值的欄位時,Firestore 會根據內部表示法決定排序。以下是排序清單:

  1. 空值
  2. 布林值
  3. 整數和浮點值,依數值順序排序
  4. 日期值
  5. 文字字串值
  6. 位元組值
  7. Firestore 參考資料
  8. 地理點值
  9. 陣列值
  10. 向量嵌入
  11. 對應值

依數字排序

Firestore 會將所有數值 (IntegerFloating point) 交錯排序。浮點比較會遵循 IEEE 754 的總排序,但值得注意的是,Firestore 會將所有 NaN 值正規化,並視為小於 -Infinity