我一直在尝试(没有成功)从Firebase数据库中检索组中的用户列表;我想知道它是否可能基于我的数据结构(如下),或者是我的快速代码问题(也在下面)
这是我的Firebase结构:
Users
---- <UserID>
---------- Username
---------- Email
---------- etc...
Groups
---- <GroupID>
---------- GroupName
---------- CreationDate
---------- GroupAdmin
---------- etc...
UsersInGroups
------- UserID
---------- GroupID : true <---- User is in Group
通过上述数据结构,我可以检索特定users
中所有group
的列表吗?
目前我的快速代码如下:
ref = Database.database()reference(withPath: "UsersInGroups")
handle = ref.queryOrdered(byChild: <userID>).queryEqual(toValue: true).observe(.value, ....
正如您可以想象的那样,userID
并未将groupID = true
拉到哪里!?
最后,我想知道这是否可行:我想获得用户所做的所有GroupEntries
的列表。
Firebase结构如下:
GroupEntry
-------- <GroupID>
--------------- <entryID> : <userID>
是一个动态且唯一的字符串(例如3:8),userID是创建条目的用户。
快速代码如下:
ref = Database.database()reference(withPath: "GroupEntry")
handle = ref.child(<groupID>).queryEqual(toValue: <userID>).observe(.value, ...
任何人都可以提供任何帮助!?
答案 0 :(得分:2)
您可以使用以下位置表示组和用户之间的关系:
group-users/$groupId/$uid
user-groups/$uid/$groupId
存储两种关系的反转将为您提供更多的查询能力。要检索组中的用户,您可以观察group-users/$groupId
处的孩子 - 另一方面,您可以通过观察user-groups/$userId
处的孩子来获取用户所在的组。
组条目可以用另外两个位置表示:
group-entries/$groupId/$entryId
user-entries/$userId/$entryId
您可以通过观察user-entries/$userId
获取用户所做的所有条目;您可以通过包含条目$groupId
。
所有这些地点面临的挑战是维护它们 - 确保数据始终保持一致。这可以使用其中一个Firebase客户端SDK以某种手动方式进行,但您可以考虑使用云功能创建更新数据库中相关位置的触发器。