ios - 从 firebase 检索唯一数据

标签 ios swift firebase firebase-realtime-database

我有一些信息发送到 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 postthis 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

其中otheruidFIRDatabase.database().reference().child("users").child(username)的值

关于ios - 从 firebase 检索唯一数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44416845/

相关文章:

ios - 设置ScrollView初始位置swift 4

ios - 插入行后 UITableViewCell 动态高度中断

javascript - |已解决|从 Firebase 获取用户身份验证数据并将其添加到 Firebase DB

java - WEB-无法解析符号 'Firebase options' 错误

android - 在 Android 和 IOS 之间选择使用哪种音频文件格式?

objective-c - 沿直线路径和拐角拖动 UIView

iOS 8 Swift - 保存多个实体的数据

android - 打开存储在 Firebase 存储中的 pdf 文件 url

iphone - Xcode,只检索带有字母 A 的地址簿姓氏(依此类推)

ios - 在 objective-c 中重写 getter