我正在为我的安卓和iOS应用程序使用。我被困在如何构造我的数据库。
基本上,我有一个包含许多用户的“组织”集合,对于每个用户,我都希望节省出勤时间,并为每一天留出时间。
问题是,我想要生成报告,允许我获得每个用户的每天出勤率、所有用户的单日考勤,以及所有用户的全天考勤。
所以我试过这样做:在用户内部,我有一个“考勤”集合,然后每个文档都是当天的Unix时间戳(以确保它是唯一的)。然后保存像attend_time和leave_time...etc这样的字段。路径就像那个"/organization/android/users/3PRs42gRFzZQhLKcUhpf4wPMRV43/attendance/1590271200“
然后我需要为所有用户获取一天的出勤率,所以我这样做了:现在我有了另一条路径“/organization/android/考勤”,在考勤中,我存储当天的Unix时间戳,然后是用户ID,然后是他的出勤率。现在我要节省两次出席人数。
但是我仍然不能让所有的用户每天都有出勤!这在像SQL这样的关系数据库中很容易实现。知道在火场怎么做吗?
发布于 2020-05-26 15:54:25
如果您想跟踪所有用户的出勤率,您正在寻找一个集合组查询。这允许您从名为attendance的所有集合中查询文档。
由于Firestore中的查询只能看到它所查询的集合中的数据,因此您可能必须将父集合(您的users和organizations)中的一些数据复制到每个考勤文档中,以允许查询。这种类型的数据复制在NoSQL数据库中也是相当正常的。
最后:如果您需要执行许多临时查询,您可能需要考虑为那些更适合该用例的查询使用数据库。例如,使用Firestore来处理需要扩展到大量用户的直接到客户端交互,然后使用BigQuery对该数据进行临时查询是非常常见的。甚至还有一个Firebase扩展,即自动导出到BigQuery使这更容易。
https://stackoverflow.com/questions/62025918
复制相似问题