来自Firebase的Retreive数据

时间:2017-11-24 18:37:13

标签: ios swift firebase firebase-realtime-database

我一直在尝试(没有成功)从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, ...

任何人都可以提供任何帮助!?

1 个答案:

答案 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以某种手动方式进行,但您可以考虑使用云功能创建更新数据库中相关位置的触发器。