【发布时间】:2019-06-16 12:50:26
【问题描述】:
我在 Firestore 中有以下数据结构:
{
items: [
itemId1: {},
itemId2: {},
itemId3: {}
],
users: [
userId1: {
itemIds: [
"itemId1",
"itemId3"
]
}
]
}
这种数据结构的目标是让许多用户能够访问和协作处理相同的项目。因此,将这些项目移动到每个用户中将是相当低效和困难的。
如果我有 userId (userId1),我想查询用户 itemIds 数组中的所有项目的项目集合。
因此,在本例中,它将返回 [itemId1: {}, itemId3: {}]。
我的应用程序是一个使用 Angular (7.2.1) 和 Angularfire 的应用程序。
如果我的数据结构本身存在缺陷,请告诉我,我可以尝试更改它们。
提前谢谢。
【问题讨论】:
-
按照你现在的方式,你不能在一个查询中做到这一点。事实上,您需要为用户及其项目列表执行一次 get(),然后为列表中找到的每个项目执行另一次 get()。 (换句话说,Firestore 中没有类似“SQL 连接”的功能。)
-
对于这样的协作应用程序是否有任何推荐的数据设计模式?
-
我认为这取决于您希望 UI 的操作方式。当我有一个共享的事物池时,我会执行其中的一些操作,但用户一次只能编辑一件事。例如,如果一个团队有 5 个用户和 3 场比赛,我将所有 5 个用户非规范化到团队中,以及 3 场比赛。当我非规范化时,我决定哪些字段很重要。所以对于用户来说,是他们的名字、身份证,也许还有他们的号码和职位。对于游戏,它是日期/时间、对手名称、简单位置、ID。在 Firestore 中效率低下之前,您可以在文档中保存多达 1MB 的数据,但请注意没有保存限制
标签: angular firebase google-cloud-firestore