gpt4 book ai didi

swift - 如何在数据库中搜索 Firebase

转载 作者:可可西里 更新时间:2023-11-01 00:50:00 26 4
gpt4 key购买 nike

我在 Stackoverflow 上进行了搜索,但没有找到我正在寻找的解决方案

如果“名称”等于导航标题中的名称并且用户用于登录的“电子邮件”等于数据库中的电子邮件,我想在数据库 firebase 中搜索,然后它将避免用户添加新项目

Json 看起来像这样

"Items" : {
"-KUMSKLFqMjclbqygnPL" : {
"Item" : "asdfg"
"Name" : "Fadi”,
"User Email" : "i@i.com"
}
}

我的代码是

    let databaseRef = FIRDatabase.database().reference()

var NAME : String!
var UserEmail : String!
var email : String!

databaseRef.child("Items").queryOrderedByKey().observe(.childAdded, with: { snapshot in

let snapshotValue = snapshot.value as? NSDictionary
NAME = (snapshotValue?["Name"] as? String)!

UserEmail = (snapshotValue?["User Email"] as? String)!
email = (FIRAuth.auth()?.currentUser?.email)!

if NAME == navigationItem.title {

if UserEmail == email {
print ("you can't add new item \(UserEmail)")
}else if UserEmail != email {
print("you can add new Item")

}
}
})

我的问题是如果名称等于 Fadi 但有两个不同的电子邮件结果会是

you can't add new item Optional("i@i.com")
you can add new Item

它应该只打印

you can't add new item Optional("i@i.com")

我不知道如何破解它,现在它看起来像是在遍历所有数据库

已更新:

我试试德拉威式的答案

打印结果(snapShot.value):

    "-KUMS7J-rCglHrVGX840" =     {
"Item" = "asdsd"
"Name" = "a";
"User Email" = "a@a.com";
};

结果是对的!但现在我需要从该节点提取用户电子邮件

最佳答案

如果您正在寻找具有特定名称的节点,请尝试以下操作:-

  let databaseRef = FIRDatabase.database().reference()
databaseRef.child("Items").queryOrdered(byChild: "Name").queryEqual(toValue: "Fadi").observeSingleEvent(of: .value, with: { (snapShot) in

if let snapDict = snapShot.value as? [String:AnyObject]{

for each in snapDict{
let key = each.key as! String
let name = each.value["Name"] as! String
print(key)
print(name)
}
}
}, withCancel: {(Err) in

print(Err.localizedDescription)

})

关于swift - 如何在数据库中搜索 Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40194937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com