设计数据结构

请注意,在 Firestore 中设计数据结构时,您可以使用几种不同的方案:

  • 文档
  • 多个集合
  • 在文档中使用子集合

请根据您的使用场景考虑每种选项的优势。本指南概述了分层数据的一些示例结构。

文档中的嵌套数据

您可以在文档中嵌套复杂的对象,例如数组(映射)。

  • 优点:如果您想在文档中保存简单的固定数据列表,可使用此选项,它易于设置,而且可简化数据结构。
  • 限制: 此方案的可扩缩性不如其他方案,特别是数据会随时间不断增加的情况。如果列表较大或者越来越大,文档也会变大,这可能导致文档检索时间增加。
  • 此方案适用于哪些使用场景?例如,在聊天应用中,您可以将用户最近进入的 3 个聊天室作为嵌套列表存储在其个人资料中。
  • alovelace
    •     name :
            first : "Ada"
            last : "Lovelace"
          born : 1815
          rooms :
            0 : "Software Chat"
            1 : "Famous Figures"
            2 : "Famous SWEs"

子集合

如果您的数据可能会随着时间的推移而增加,您可以在文档中创建集合。

  • 优点:当您的列表变大时,父文档的大小不会改变。您还可以获得对子集合的完整查询功能,并且可以跨子集合发出集合组查询
  • 限制:您无法轻松删除子集合。
  • 此方案适用于哪些使用场景?例如,在前述聊天应用中,您可以在聊天室文档中为用户或消息创建集合。
  • science
    • software
        name : "software chat"
      • users
        • alovelace
              first : "Ada"
              last : "Lovelace"
        • sride
              first : "Sally"
              last : "Ride"`


    • astrophysics
      • ...

根级集合

在数据库的根级别上创建集合,以整理不同的数据集。

  • 优点:根级集合适合多对多关系,并在每个集合内提供强大的查询功能。
  • 限制:随着数据库增大,获取自然分层的数据可能会变得越来越复杂。
  • 此方案适用于哪些使用场景?例如,在前述聊天应用中,您可以为用户创建一个集合,为聊天室和消息创建另一个集合。
  • users
    • alovelace
          first : "Ada"
          last : "Lovelace"
          born : 1815
    • sride
          first : "Sally"
          last : "Ride"
          born : 1951
  • rooms
    • software
      • messages
        • message1
              from : "alovelace"
              content : "..."
        • message2
              from : "sride"
              content : "..."