Firebase在Swift中检索数据

我试图从当前login的用户检索特定的数据。 我的数据库中的数据如下所示:

在这里输入图像说明

例如,我想只抓住full_name并将其保存在variablesuserName中。 以下是我用来抓取我的数据

ref.queryOrderedByChild("full_name").queryEqualToValue("userIdentifier").observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in print(snapshot.value) // let userName = snapshot.value["full_name"] as! String }) 

不幸的是,这是我的控制台打印。

在这里输入图像说明

我将不胜感激任何帮助:)谢谢!

它给你的警告消息indexOn因为你正在查询。

您应该通过安全和Firebase规则中的.indexOn规则来定义要编入索引的键。 虽然您可以在客户端上特别创build这些查询,但在使用.indexOn时,您将看到性能大大提高

如您所知,您正在查找的名称可以直接转到该节点,而无需查询。

  let ref:FIRDatabaseReference! // your ref ie. root.child("users").child("stephenwarren001@yahoo.com") // only need to fetch once so use single event ref.observeSingleEventOfType(.Value, withBlock: { snapshot in if !snapshot.exists() { return } //print(snapshot) if let userName = snapshot.value["full_name"] as? String { print(userName) } if let email = snapshot.value["email"] as? String { print(email) } // can also use // snapshot.childSnapshotForPath("full_name").value as! String }) 
 { "rules": { "tbl_name": { ".indexOn": ["field_name1", "field_name2"] }, ".read": true, ".write": true } } 

你可以在任何字段上应用indexOn。 在规则安全性和规则选项卡中添加此json。 希望这对你有用。 🙂

它检索login的用户数据:

 let ref = FIRDatabase.database().reference(fromURL: "DATABASE_URl") let userID = FIRAuth.auth()?.currentUser?.uid let usersRef = ref.child("users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in print(snapshot) 

斯威夫特4

 let ref = Database.database().reference(withPath: "user") ref.observeSingleEvent(of: .value, with: { snapshot in if !snapshot.exists() { return } print(snapshot) // Its print all values including Snap (User) print(snapshot.value!) let username = snapshot.childSnapshot(forPath: "full_name").value print(username!) })