10
votes

I am working on firebase project, where i stored user info within a Table. Now my requirement is to show all user's in a Table. Here is my database snapshot

enter image description here

I can fetch all user's with from database using

       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)
            }
        }

Above code return me users array with bod, email, name, gender. But i want to fetch only email and name of users. Is there a way to fetch only specified fields from Database ?

1

1 Answers

4
votes

When you read a node, you'll have to retrieve its entire content. So, there is no way to fetch only specific fields from the data returned on reading a path.

Having said that, if it's possible for your use case, I would suggest you to denormalise data with the purpose of queries that only retrieve the information that you need.

For doing that, you can have a separate node that can be called something like Users-NameandEmailList. Now, in this table, have user uids as your child keys, and each entry shall have only a an email and name field.

Something like this :-

Users-NameandEmailList :{

       user1key :{
             name : "ABC"
             email : "[email protected]"
                 },
       user2key : {..},

                        }

I agree that this could lead to replication of data, but if you want to minimise download redundancy and optimise for speed, then this is the way to go!