如何使用特定用户的uid获取数据?

时间:2019-08-14 19:25:35

标签: ios swift firebase firebase-realtime-database

我想获取特定用户的数据,我知道该用户的uid,因此我想检索该特定用户的所有数据。您可以帮助我如何检索用户数据吗? 预先谢谢

site_ids

func grabbingData() {
    let specificDatabase = Database.database().reference(withPath: "Data")
    let query = specificDatabase.queryOrdered(byChild: "uid").queryEqual(toValue: "ghD0lYZV1QOeJ2giUc3fNVxsLAV2")
    query.observeSingleEvent(of: .value, with: { (snapShot) in
        for child in snapShot.children {
            if let snap = child as? DataSnapshot {
                if let dictValues = snap.value as? [String: [String:String]] {
                    Array(dictValues.values).forEach {
                        let data = Data()
                        data.Name = $0["Name"]!
                        data.hold = $0["Data"]!
                        data.uid = $0["uid"]!
                        self.requestArray.append(data)
                    }
                    self.tableView.reloadData()
                }
            }
        }
    })
}

1 个答案:

答案 0 :(得分:2)

提出的Firebase结构可能具有uid的不必要重复,并且不清楚为什么,但是这里有一些代码可以读取问题中的结构并打印出每个子节点中的子值

func readUserNode() {
    let userNodeRef = self.ref.child("Data").child("ghD0lYZV1QOeJ2giUc3fNVxsLAV2")
    userNodeRef.observeSingleEvent(of: .value, with: { snapshot in
        let allChildNodes = snapshot.children.allObjects as! [DataSnapshot]
        for child in allChildNodes {
            let name = child.childSnapshot(forPath: "Name").value as? String ?? "no name"
            let data = child.childSnapshot(forPath: "Data").value  as? String ?? "no data"
            let uid = child.childSnapshot(forPath: "uid").value  as? String ?? "no uid"
            print(name, data, uid)
        }
    })
}

和输出(我将Fake更改为Fake1和Fake2,以便可以看到每个节点都已打印)

Fake1 data ghD0lYZV1QOeJ2giUc3fNVxsLAV2
Fake2 data ghD0lYZV1QOeJ2giUc3fNVxsLAV2

进一步解决这个问题。

使用Firebase,仅在不存储数据的节点时才需要查询数据。换句话说,对于此用例,您知道用户uid(ghD0lYZV1QOeJ2giUc3fNVxsLAV2)以及要存储的数据在以该uid为键的节点中。

因此,无需查询即可直接访问该节点。