这个问题在这里已有答案:
我一直在尝试(没有成功)从Firebase数据库中检索组中的用户列表;我想知道它是否可能基于我的数据结构(如下),或者问题是我的快速代码(也在下面)
这是我的Firebase结构:
Users
---- <UserID>
---------- Username
---------- Email
---------- etc...
Groups
---- <GroupID>
---------- GroupName
---------- CreationDate
---------- GroupAdmin
---------- etc...
UsersInGroups
------- UserID
---------- GroupID : true <---- User is in Group
通过上面的数据结构,我可以在特定的 group
中检索所有 users
的列表吗?
目前我的swift代码如下:
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, ...
任何人都可以提供任何帮助!?
1 回答
您可以使用以下位置表示组和用户之间的关系:
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以某种手动方式进行,但您可以考虑使用 Cloud 功能创建更新数据库中相关位置的触发器 .