【发布时间】:2018-05-01 05:38:46
【问题描述】:
我正在从 Firebase 实时数据库切换到 Cloud Firestore。我的数据库包含拥有存储的用户,每个存储都包含盒子。每个用户可以拥有多个包含 Box 的 Storage。每个 Storage 可以包含多个 Box。每个 Box 只能在一个 Storage 中。
在我的应用程序的主视图中,对于该特定用户,我需要列出所有存储以及每个存储中的框,如下所示:
Storage 1:
Box 1
Box 2
Storage 2:
Box 3
Box 4
Box 5
...
然后,用户应该能够点击每个 Box 以查看内容和更多信息。
在 Firebase 实时数据库中,这可以通过每个用户一个请求来获得。现在有了 Firestore,我不确定如何创建最佳模型,因为我只能进行浅读。如果我使用子集合,我无法在一个请求中获得所有已连接 Box 的存储。然后,要获得所有盒子,我需要先执行一个请求以获取所有存储,然后为每个存储请求一个以获取盒子。
我对 Firestore 结构的想法是以下之一,但我不确定这是要走的路:
结构1:
使用两个单独的集合
Storages Collection
storage_1:
name: "Storage number one"
user_id: "1"
storage_2:
name: "Storage number two"
user_id: "1"
Boxes Collection
box_1:
storage_id: "1"
user_id: "1"
box_2:
storage_id: "1"
user_id: "1"
这个解决方案的问题是在为特定用户加载 Boxes 集合时如何获取存储的名称。然后我还需要在本地的每个存储下对它们进行排序。
我对结构的另一个想法是:
使用两个单独的集合和存储集合下的字典。
Storages Collection
storage_1:
name: "Storage number one"
user_id: "1"
boxes: [{ box_id: "1", name: "Box number 1" }, { box_id: "2", name: "Box number 2" }]
storage_2:
name: "Storage number two"
user_id: "1"
boxes: []
Boxes Collection
box_1:
storage_id: "1"
user_id: "1"
box_2:
storage_id: "1"
user_id: "1"
考虑到我上面解释的用户体验,这些结构中的任何一个是一个很好的解决方案,还是我错过了更好的方法?
【问题讨论】:
-
你是说你在使用实时数据库的时候,只是从根节点读取整个数据库就可以得到一切了吗?
-
@DougStevenson 哦,我明白了,这个例子有点简化,现在更新!
标签: firebase google-cloud-firestore