我正在开发一个带有firebase后端的ios应用程序。当用户注册时,用户节点在firebase中创建,其中有不同的孩子,如电子邮件,姓名,头像等。我正在做的是我在用户节点中搜索一些电子邮件,如果我在某个节点中找到该电子邮件,我想得到它的父键,即-Ksdd23d2djhsdgjhs。查看图片:
如果电子邮件与我的电子邮件匹配,我想用上箭头获取值。
我有一个电子邮件地址,我正在搜索用户节点中的所有孩子,然后在里面进一步检查以将电子邮件与我的电子邮件进行比较。如果电子邮件匹配,我想得到它的父节点,如图像中的Dn2LUAwdolg .....。
我可以获得用户节点下的第一个节点。假设图片中显示的节点Dn2LU ..处于某个未知位置,并且如果它的电子邮件子值与我正在比较它的那个匹配,我必须搜索所有用户以获取其名称。
希望现在很清楚
答案 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)")
})
}