firebase - 如何确定我需要使用集合还是子集合?
问题描述
我的应用程序有 2 种类型的用户 -企业和客户。每个企业都有一条线路,用户可以进入。
我不确定是否最好为每个带有customerId的业务创建一个名为“ tickets ”的子集合,或者使用相应的customerId和businessId创建一个单独的集合“tickets” 。我认为我永远不需要一次选择所有门票的机会。但我确信我会有一个仪表板,我希望客户在其中查看所有可用线路并查看那里有多少人。
就像我说的,我有两种类型的用户——客户和企业,他们的个人资料信息可能会有所不同。所以,我想将它们分开而不是像userType这样的字段更好,对吧?
我将附上我创建的粗略架构,以更好地了解我需要存储哪些数据。
解决方案
这取决于你如何喜欢它。如果您采用第一种方法,即创建一个专用集合来添加票证,那么我假设您的文档的一部分看起来像:
{
customerID: "customerID",
businessID: "businessID",
customerType: "typeOfCustomer",
createdAt: 1624178545493
}
这样做的好处是您可以创建各种查询,例如获取特定客户、业务或用户类型的票证或特定时间段内的票证。
在它自己的子集合中添加特定业务的工单看起来很有条理,但是如果您想查询特定用户的所有工单并且该用户在多个业务中拥有工单,那就更难了。您可能必须存储用户已打开票证的企业 ID。
在我看来,从长远来看,一个专门的集合可以为您提供灵活的查询。
您可以使用以下安全规则,以便用户只能看到他/她的票证。
service cloud.firestore {
match /databases/{database}/documents {
match /tickets/{ticketID} {
allow read: if request.auth != null && resource.data.userID == request.auth.uid;
}
}
}
同样,您可以轻松地为企业和其他文档编写规则。您可以在此处阅读有关 Firestore 安全规则的更多信息
推荐阅读
- python - Vowpal Wabbit:找不到命令
- c++ - 什么是 n= n ^1U<
我在这里面临的问题是了解
n
循环的每次迭代中值的变化。
如果您通过 2-3 次迭代来解释它,那就太棒了。更正 - 返回值应该是 32 位 ....这正在改变所有位 0->1 和 1->0 。long fun(long n) { for(int i = 0; i < 32; i++) n = n ^ 1U <
- javascript - 我们如何在浏览器中获取文件的完整路径
- sqlite - 如何使用 next.jdbc 将 SQLite 中的 bool 列读入 bool Clojure 值?SQLite 将布尔值存储为 0/1
- javascript - jquery单击按钮显示特定模板
- c++ - 使用折叠表达式的 C++17 树遍历
- javascript - 触发从数组生成的元素的子元素的点击事件
- ruby-on-rails - 如何卸载 ahoy gem
- python - 存储用于出口的 SARIMAX 模型?
- python - 有没有办法让 np.where 跳过任何包含非数字的字符串?