我有一些信息发送到 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。
最佳答案
根据您对我的评论的回复,您似乎需要有关用户的所有信息,例如选择用户的个人资料。这就是非规范化派上用场的地方。 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"
},
...
}
}
然后,您不再监听登录用户的值,而是监听所选用户 uid 的值,然后使用该值进行监听:
FIRDatabase.database().reference().child("info").child(otheruid)
.observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in
其中otheruid
是FIRDatabase.database().reference().child("users").child(username)的值
关于ios - 从 firebase 检索唯一数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44416845/