【问题标题】:Fetch particular fields from Firebase database从 Firebase 数据库中获取特定字段
【发布时间】:2017-12-08 17:27:01
【问题描述】:

我正在开发 firebase 项目,我将用户信息存储在一个表中。 现在我的要求是在表格中显示所有用户。 这是我的数据库快照

我可以使用

从数据库中获取所有用户的
       if let user = FIRAuth.auth()?.currentUser {
            self.ref?.child("Users").observeSingleEvent(of: .value, with: { (snapshot) in
                // Get user value
                let value = snapshot.value as? NSDictionary
                let name = value?["name"] as? String ?? ""
                let email = value?["email"] as? String ?? ""


            // ...
            }) { (error) in
                print(error.localizedDescription)
            }
        }

上面的代码返回我的用户数组,包括身体、电子邮件、姓名、性别。 但我只想获取电子邮件和用户名。 有没有办法只从数据库中获取指定的字段?

【问题讨论】:

标签: ios swift firebase firebase-realtime-database firebase-authentication


【解决方案1】:

当您读取一个节点时,您必须检索其全部内容。因此,无法从读取路径时返回的数据中仅获取特定字段。

话虽如此,如果您的用例可能,我建议您对数据进行非规范化处理,以便仅检索您需要的信息。

为此,您可以有一个单独的节点,可以称为 Users-NameandEmailList 之类的名称。现在,在此表中,将用户 uid 作为您的子键,并且每个条目应只有一个电子邮件和姓名字段。

类似这样的:-

Users-NameandEmailList :{

       user1key :{
             name : "ABC"
             email : "abc@abc.com"
                 },
       user2key : {..},

                        }

我同意这可能会导致数据复制,但如果您想最大限度地减少下载冗余并优化速度,那么这就是要走的路!

【讨论】:

    【解决方案2】:

    您可以使用select 关键字,您的查询将类似于:

    firebase.database().collection('Users').select('name').get();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-04
      • 2021-10-25
      • 2017-07-04
      • 2018-11-26
      • 2021-04-25
      • 2019-07-03
      • 1970-01-01
      • 2020-09-20
      相关资源
      最近更新 更多