我有一些信息被发送到firebase。在我的应用中,用户输入有关他们自己的信息,并将其存储在uids下。这是层次结构:
{
"gJRhIOfmckTq9cRWNnwhg7tdxxv1" : {
"City" : "New York, New York",
"College" : "New York University of New York",
"Major" : "Nursing",
"uid" : "gJRhIOfmckTq9cRWNnwhg7tdxxv1"
},
"ix7JSoW5JZMSmDjwQRUUd8W7fi2" : {
"City" : "Miami, Florida",
"College" : "University of Miami",
"Major" : "Neuroscience ",
"uid" : "ix7JSoW5JZMSmDjwQRUUd8W7fi2"
}
}
以下是上传数据的路径:
FIRDatabase.database().reference().child("info").child(self.loggedInUser!.uid)
.observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in
问题是,当某个特定用户登录时,他们应该能够看到其他用户的信息,但当我尝试检索未登录用户的信息时,我遇到了问题因为uid。我只获取未登录用户信息页面中显示的登录用户信息。如何使.child(self.loggedInUser!.uid)
使其不仅捕获登录用户的uid而且捕获所有uid。
答案 0 :(得分:0)
根据您对我的评论的回复,您似乎需要在选择其个人资料时需要有关用户的所有信息。这就是非规范化将派上用场的地方。 This blog post和this YouTube video详细介绍了非规范化的内容和原因,因此我在这里不太了解。
使用非规范化,您可以包含一个子项,该子项列出所有用户都将用户名作为密钥,并将用户的uid列为值。然后,当用户通过用户名选择该用户时,例如从表格中的列表中选择该用户,您可以找到用户的uid,然后收听用户个人资料的值。数据库结构将是这样的:
{
users: {
"thisperson": "gJRhIOfmckTq9cRWNnwhg7tdxxv1",
"anotherperson": "ix7JSoW5JZMSmDjwQRUUd8W7fi2",
...
},
info: {
"gJRhIOfmckTq9cRWNnwhg7tdxxv1" : {
"City" : "New York, New York",
"College" : "New York University of New York",
"Major" : "Nursing",
"uid" : "gJRhIOfmckTq9cRWNnwhg7tdxxv1"
},
"ix7JSoW5JZMSmDjwQRUUd8W7fi2" : {
"City" : "Miami, Florida",
"College" : "University of Miami",
"Major" : "Neuroscience ",
"uid" : "ix7JSoW5JZMSmDjwQRUUd8W7fi2"
},
...
}
}
然后,您不是监听已登录用户的值,而是监听所选用户的值,然后使用该值进行侦听:
FIRDatabase.database().reference().child("info").child(otheruid)
.observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in
其中otheruid
是FIRDatabase.database().reference().child("users").child(username)