Firebase,获得具有特定价值的孩子的直接父母

时间:2017-08-23 09:20:05

标签: ios swift firebase firebase-realtime-database

我正在开发一个带有firebase后端的ios应用程序。当用户注册时,用户节点在firebase中创建,其中有不同的孩子,如电子邮件,姓名,头像等。我正在做的是我在用户节点中搜索一些电子邮件,如果我在某个节点中找到该电子邮件,我想得到它的父键,即-Ksdd23d2djhsdgjhs。查看图片:image

如果电子邮件与我的电子邮件匹配,我想用上箭头获取值。

我有一个电子邮件地址,我正在搜索用户节点中的所有孩子,然后在里面进一步检查以将电子邮件与我的电子邮件进行比较。如果电子邮件匹配,我想得到它的父节点,如图像中的Dn2LUAwdolg .....。

我可以获得用户节点下的第一个节点。假设图片中显示的节点Dn2LU ..处于某个未知位置,并且如果它的电子邮件子值与我正在比较它的那个匹配,我必须搜索所有用户以获取其名称。

希望现在很清楚

4 个答案:

答案 0 :(得分:8)

我认为你要找的是这里记录的: https://firebase.google.com/docs/reference/js/firebase.database.Reference#equalTo

我不是IOS开发人员,但我这是一个JS示例:

// Find all users which match the child node email.
var ref = firebase.database().ref('user');
ref.orderByChild('email').equalTo('wal@aol.com').on("value", function(snapshot) {
  snapshot.forEach((function(child) { console.log(child.key) }); 
});

快照包含整个节点,但snapshot.key将返回节点密钥(在您的示例中:Dn2LUAwdolg ...)

答案 1 :(得分:6)

您可以使用.ref从快照中获取参考,然后使用儿童参考上的.parent抓住参考的父级,然后使用.key抓取密钥该引用将作为示例中的父键:Dn2LUAwdolgf6HCn11UiSihejty1

所以我们在avata的快照上有例如

snapshot.ref.parent.key

在您的情况下等于

Dn2LUAwdolgf6HCn11UiSihejty1

答案 2 :(得分:1)

我正在回答我的问题,但我会赞成@André的回答,这有助于我实现我想要的目标。我在这里发布了我编写的Swift 3.0代码,同时考虑了André的代码。

        let idtosearch = email
        let ref = Database.database().reference().child("user")
        ref.queryOrdered(byChild: "email").queryEqual(toValue: idtosearch).observeSingleEvent(of: .childAdded, with: { (snapshot) in
            print("\(snapshot.key)")
        })

答案 3 :(得分:0)

在我的情况下,在加载我的好友列表所需的UID下还有其他UID:

为此,我创建了此方法

class func downloadAllFriendList(UserID:String, completion: @escaping (UserSimplifiedCredentials?) -> Swift.Void) {
    var ref = Database.database().reference().child("Friendship").child(UserID).observe(.childAdded, with: { (snapshot) in
        print("the child parent id is +++++++> \(snapshot.key)")
    })

}