Firebase,获取具有特定值的子节点的直接父节点

9
我正在开发一个带有firebase后端的iOS应用程序。当用户注册时,firebase中创建了一个名为"user"的节点,其下有不同的子节点,如电子邮件、姓名、头像等。我的操作是在用户节点中搜索某个电子邮件,如果我在某个节点中找到这个电子邮件,我想要获取它的父键,即-Ksdd23d2djhsdgjhs。请参阅以下图片: image 如果电子邮件匹配,则我希望获取上箭头所指的值。
我有一个电子邮件地址,并通过搜索user节点下的所有子节点来进一步检查是否匹配该电子邮件。如果电子邮件匹配,则我希望获取其父节点,就像图片中的Dn2LUAwdolg.....一样。
我可以获取用户节点下的第一个节点。假设在图片中显示的节点Dn2LU..在某个未知位置,我必须搜索所有用户才能找到其名称,以便在电子邮件子节点值与我比较的值相匹配。
希望现在清楚了。

你从用户那里获取0的第一个元素。 - Sagar Bhut
1
请说明您已经尝试过什么,以及哪些部分没有起作用。您的问题当前状态太宽泛,并且明显缺乏研究努力。 - Dávid Pásztor
让我在那里添加更多内容。 - Jacob Kaif
@JacobKaif 添加你编写的__code__,这是你问题中缺少的部分...如果你甚至不知道从哪里开始,请查看一些Firebase教程。 - Dávid Pásztor
4个回答

12

我认为你在寻找的内容已经记录在这里了: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
那个 console.log() 将始终记录 user。你可以监听 on("child_added",或循环遍历子节点 snapshot.forEach((function(child) { console.log(child.key); }) - Frank van Puffelen
非常感谢 @André。 - Jacob Kaif
@FrankvanPuffelen,你是对的,感谢指出这一点,我会编辑我的答案 :) - André Düwel

10

您可以使用.ref从快照中获取引用,然后使用.parent在子引用上获取其父项,然后使用.key来获取该引用的键,该键将是您示例中的父键:Dn2LUAwdolgf6HCn11UiSihejty1

因此,例如在头像的快照上:

snapshot.ref.parent.key

在您的情况下将等于

Dn2LUAwdolgf6HCn11UiSihejty1

2

我在回答我的问题,但我会点赞@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)")
        })

0

在我的情况下,我有其他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)")
    })

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接