【发布时间】:2020-10-19 21:43:04
【问题描述】:
我是 Firestore 的新手,正在尝试为我的应用开发数据模型。
背景:我有一种约会类型的应用程序,用户可以通过 3 种主要方式相互交流。喜欢、拒绝和评论用户个人资料。用户喜欢和 cmets 是私人的。换句话说,只有我可以看到谁喜欢或评论了我的个人资料(它不像社交媒体,每个人都可以看到谁喜欢了一个帖子)。我需要能够查询用户以了解谁取消了他们的个人资料,因此我不会再次向这些用户显示。我还需要知道谁喜欢/评论了用户个人资料,这样我就可以查询哪些用户互相喜欢/评论了(他们已经匹配)
- 用户可以喜欢许多个人资料,反之亦然
- 用户可以关闭/跳过许多个人资料,反之亦然
- 用户可以评论许多个人资料,反之亦然
我相信这意味着我需要 likedUsers、dismissedUsers 和 commentedUsers 的根集合
问题: 对于被解雇的用户,我想我会将每个用户存储为dismissedUsers 根集合的文档,并将他们跳过的每个用户存储为一个字段/值对,就像这样......
dismissedUsers/User/user1、user2、user3 等
以上将创建我想要的多对多关系,其中被解雇的用户可以有很多用户,而用户可以有很多被解雇的用户。但是,我不相信它会随着用户文档变得太大而具有可扩展性。
问题:我如何创建这种多对多关系,其中dismissedUsers 可以有很多用户,而用户可以有很多dismissedUsers,以便它具有可扩展性且成本最低?并查询?
【问题讨论】:
-
将文档添加到文档 D 下的子集合不会使文档 D 的大小变大。每个文档都是完全独立的,无论它在哪里组织。
-
@DougStevenson 好的,所以我应该在用户文档中添加一个子集合,用于 likeUsers、dismissedUsers、commentedUsers?明白了,但我读到,当这样做时,数据的范围仅限于该特定用户(防止跨父文档查询)?不是这样吗?
-
您可能想了解集合组查询,以跨具有不同父文档的子集合进行查询。
-
这个问题的问题是它太模糊了,我们没有足够的信息来评估这个问题。例如用户文档会变得太大这是什么意思?太大了怎么办?您可以在 /users/uid 文档中存储数以万计具有该格式的文档,这将是少量数据。此外,为什么还要首先将其存储在那里?为什么没有单独的集合来存储用户被解雇的用户?然后它与用户文档完全分开。 我如何创建这种多对多关系 - 拥有用户和解雇用户集合。
-
@Jay 假设层次结构如下:users/user1/dismissedUsers/user2,user3,user4等。我的问题是我如何建模和执行不等式查询来加载所有用户(对于 user1),除了dismissedUsers 子集合中的用户?
标签: ios swift firebase firebase-realtime-database google-cloud-firestore