受支持的数据类型

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

数据类型

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

数据类型 排列顺序 备注
32 位整数 数字

32 位,有符号

注意:仅在企业版中受支持。

64 位整数 数字 64 位,有符号
数组 按元素值

在标准版数据库中,数组不能包含另一个数组值作为其元素之一。在企业版数据库中,数组可以包含数组值作为其元素之一。

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

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

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

布尔值 false < true —
BSON 时间戳 时间顺序

一个 64 位时间戳值,由 Unix 秒数和增量计数器组成。

注意:仅在企业版中受支持。

字节 字节顺序 在标准版数据库中,该值不得超过 1,048,487 字节(1 MiB - 89 字节),并且查询只会考虑前 1,500 字节。在企业版数据库中,值的大小没有限制(文档和索引条目大小限制除外),并且查询会考虑完整值。
带子类型的字节 字节顺序(先子类型,后值)

带有 BSON 子类型指示器的二进制字节序列。

注意:仅在企业版中受支持。

日期和时间 时间顺序 当存储在 Firestore 中时,仅精确到微秒;额外的精度位会被舍弃。
Decimal128 数字

用于高精度算术的 128 位十进制浮点数。

注意:仅在企业版中受支持。

浮点数 数字 64 位双精度,符合 IEEE 754 标准,包括(标准化)NaN 和 +/-Infinity。
地理位置点 先按纬度排序,然后按经度 如需根据距离进行搜索,请参阅地理空间搜索。
地图 按键,然后按值

表示文档中嵌入的对象。编入索引后,您可以对子字段进行查询。如果您将此值从索引中排除,则所有子字段也将从索引中排除。

始终按键顺序进行排序。例如,如果您写入 {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"}

全速键 无

特殊值,其比较结果高于所有其他值。

注意:仅在企业版中受支持。

最小值键 无

特殊值,其比较结果低于所有其他值(null 除外)。

注意:仅在企业版中受支持。

空 无 —
ObjectId 字节顺序

12 字节的对象标识符。

注意:仅在企业版中受支持。

参考文档 按路径元素(集合、文档 ID、集合、文档 ID…) 例如 projects/[PROJECT_ID]/databases/[DATABASE_ID]/documents/[DOCUMENT_PATH]。
正则表达式 先按模式,再按选项

正则表达式模式和选项。

注意:仅在企业版中受支持。

文本字符串 采用 UTF-8 编码的字节顺序 在标准版数据库中,该值不得超过 1,048,487 字节(1 MiB - 89 字节),并且查询只会考虑前 1,500 字节。在企业版数据库中,值的大小没有限制(文档和索引条目大小限制除外),并且查询会考虑完整值。
向量 先按维度,然后按各个元素值 支持的嵌入维度上限为 2,048。要在向量中存储更高的维度,可使用降维。

值类型排序

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

  1. Null 值
  2. 最小键值(仅限企业版)
  3. 布尔值
  4. 64 位整数和浮点值,按数字顺序排列。在企业版数据库中,还包含 32 位整数和 Decimal128 值。
  5. 日期值
  6. 文本字符串值
  7. 字节值。在企业版中,还包含具有子类型值的字节。
  8. Firestore 参考
  9. ObjectId 值(仅限企业版)
  10. 地理位置点值
  11. 正则表达式(仅限企业版)
  12. 数组值
  13. 向量嵌入
  14. 映射值
  15. 键值对数量上限(仅限企业版)

数值排序

Firestore 会对所有数值(Integer 和 Floating point)进行交错排序。浮点数比较遵循 IEEE 754 的总排序,唯一的例外是 Firestore 会将所有 NaN 值归一化,并视其小于 -Infinity。