受支持的数据类型

本文介绍 Cloud Firestore 支持的数据类型。

数据类型

下表列出了 Cloud Firestore 支持的数据类型。它还描述了比较相同类型的值时使用的排序顺序:

数据类型 排列顺序 备注
数组 按元素值

一个数组不能包含另一个数组值作为其元素之一。

在一个数组中,元素保持在分配给它们的位置。对两个或更多个数组排序时,数组根据其元素值排序。

比较两个数组时,比较的是每个数组的第一个元素。如果第一个元素相等,则比较第二个元素,依此类推,直到找到差异。如果其中的一个数组已比较完所有元素,但到此时二者仍相等,那么较短的数组将排在较长的数组之前。

例如 [1, 2, 3] < [1, 2, 3, 1] < [2]。数组 [2] 的第一个元素的值最大。数组 [1, 2, 3] 的前三个元素与 [1, 2, 3, 1] 相等,但长度较短。

布尔值 false < true
字节 字节顺序 最多 1048487 字节(1 MiB - 89 字节)。查询只会考虑前 1500 个字节。
日期和时间 时间顺序 当存储在 Cloud Firestore 中时,仅精确到微秒;额外的精度位会被舍弃。
浮点数 数字顺序 64 位双精度 (IEEE 754)。
地理位置点 先按纬度排序,然后按经度 目前,由于查询限制,建议您不要使用此数据类型。一般来说,最好将纬度和经度作为单独的数字字段存储。如果您的应用需要基于距离的简单地理查询,请参阅地理查询
整数 数字顺序 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"}

NaN -
Null
引用 按路径元素(集合、文档 ID、集合、文档 ID…) 例如 projects/[PROJECT_ID]/databases/[DATABASE_ID]/documents/[DOCUMENT_PATH]
文本字符串 采用 UTF-8 编码的字节顺序 最多 1048487 字节(1 MiB - 89 字节)。查询只会考虑采用 UTF-8 表示法的前 1500 个字节。

值类型排序

如果某个查询涉及的字段使用了混合类型的值,Cloud Firestore 会使用基于内部表示法的确定性排序方法。以下列表显示了该顺序:

  1. Null 值
  2. 布尔值
  3. NaN 值
  4. 整数和浮点值,按数字顺序排列
  5. 日期值
  6. 文本字符串值
  7. 字节值
  8. Cloud Firestore 引用
  9. 地理位置点值
  10. 数组值
  11. 映射值