Firestore 中的数据组织

2025年3月17日 | 阅读 3 分钟

Cloud Firestore 是一个 NoSQL、面向文档的数据库。它没有表或行,数据存储在文档中,这些文档组织成集合。每个文档都包含一组键值对来标识一个文档。这些键值对经过优化,可用于存储大量小型文档。

Data Organization in Firestore

所有文档都必须存储在集合中。文档可以包含子集合和嵌套对象,这些对象可以包括原始字段(如字符串)或复杂对象(如列表)。

一个文档是一个包含字段的轻量级记录,该字段映射到值。一个名称标识每个文档,我们可以将文档视为轻量级的 JSON 记录。

文档中的复杂嵌套对象被称为映射。

集合

文档位于集合中,集合是文档的非常简单的容器。集合是无模式的。我们可以自由地控制我们在每个文档中放入的字段以及我们在这些字段中存储的数据类型。同一集合中的文档可以包含并存储不同的字段以及这些字段中不同类型的数据。

  • 一个集合只包含文档,仅此而已。
  • 它不能直接包含带有值的原始字段。
  • 它不能包含其他集合。
  • 集合中文档的名称是唯一的。
  • 我们可以提供自己的键,例如用户 ID。
  • 我们可以允许 Cloud Firestore 自动为我们创建随机 ID。
  • 无需创建或删除集合。
  • 当我们创建第一个文档时,集合就存在了。
  • 如果集合中的所有文档都被删除,则该集合将不再存在。

子集合

子集合是与特定文档关联的集合。我们可以为房间集合中的每个房间文档创建一个名为消息的子集合。

当我们组织 Cloud Firestore 中的数据时,我们有以下选项

  • 文档
  • 多个集合
  • 文档内的子集合。

我们可以在文档内嵌套复杂对象,如数组或映射。如果我们有一个简单、固定的数据列表,则设置和简化我们的数据结构很容易。文档会随着列表的增大或增长而增长,这可能导致文档检索时间变慢。因此,它不像另一个选项那样可扩展。

当我们的数据可能会随着时间推移而扩展时,我们可以在文档中创建集合。随着我们的列表增长,父文档的大小不会改变,并且可以在子集合上获得完整的查询功能。子集合有一个缺点或限制,即我们无法轻松删除子集合。

示例

根级别集合

在根级别集合中,我们在数据库的根级别创建集合来组织不同的数据集。

示例

  • 每个文档都通过其在数据库中的位置唯一标识
  • 我们还可以创建对集合的引用
  • 我们还可以通过将路径指定为字符串来创建引用。路径组件由正斜杠 (/) 分隔。

示例

创建对子集合中消息的引用