【发布时间】:2018-07-14 17:01:34
【问题描述】:
情况:
我正在创建一个基本上如下所示的数据结构:
events:
adminUserId: 1337
users:
questiongroups:
questions:
text: 'foo',
value: 42
所以 events 是一个列表,每个事件的用户、每个用户每个事件的问题组以及每个用户每个事件的每个问题组的问题也是如此。其中一些有额外的字段,如 ID 等,但为了简单起见,我省略了它们。
这个数据结构很好,因为我可以限制访问,只允许用户操作他们自己的问题组列表和问题子列表 - 使用 firestore 规则。
问题:
每个事件都有一个管理员用户,该用户应该能够对他作为管理员的所有数据进行 CRUD(通过 adminUserId)。或者更准确地说,他应该能够在他的 UI 中的一张大表中看到所有关于一个事件的数据。这是一个小规模的应用程序,大约有 20 个用户,可能有 50 个问题组,平均有 5 个问题。所以基本上是这样的:
| QuestionGroup1_Question1 | QuestionGroup1_Question2 | QuestionGroup2_Question1
user #1 | foo | bar | 1337
user #2 | foo | bar | 1701
现在我希望能够以最少的查询(可能只有一个)查询一个事件的数据。 但从我目前收集到的信息来看,您只能在 Firestore 上执行浅查询,因此我只能检索“事件”的字段,但随后必须查询每个用户,然后查询每个问题组,然后再次查询每个问题 - 即使数量如此之少,也将构成大量查询。
所以基本上我的问题是:我在这里有什么选择? 我读过可以在文档中嵌套复杂的对象。但是根据https://firebase.google.com/docs/firestore/manage-data/structure-data,您无法查询它们,那么我还能通过对它们的 Firestore 规则限制访问吗?我发现你可以在使用 Firebase 实时数据库时使用通配符来做到这一点,但是 Firestore 呢?
我很乐意了解一些选项。 谢谢!
【问题讨论】:
-
这个范围很广。听起来你正在进入一个可能有很多讨论可能性的对话。发布到 firebase-talk 可能更适合这种讨论。 groups.google.com/forum/#!forum/firebase-talk
-
基本上我的问题是我是否会采用嵌套数据方法 - 比如 "event_1":{ "user_1":{...}, "user_2": {...}} -我还能对他们应用 Firestore 规则吗?就像只允许特定用户本人和管理员访问用户数据一样 - 因为我不能只查询特定事件并获取其所有子数据
标签: angular firebase google-cloud-firestore angular5