gpt4 book ai didi

ios - 使用 Swift 的 Firebase 查询无法按预期工作

转载 作者:行者123 更新时间:2023-11-28 06:25:18 24 4
gpt4 key购买 nike

我正在尝试查询我的 Firebase 数据库以查找具有特定名称或电子邮件地址的用户。我找到了几个如何执行此操作的示例,所有这些示例似乎都相对容易理解,但没有一个对我来说达到预期效果。

这是我的 json 数据结构的示例。

{
"allUsers" : {
"uid0001" : {
"userInfo" : {
"email" : "firstName1.lastName1@email.com",
"firstName" : "firstName1",
"lastName" : "lastName1",
"uid" : "uid0001"
}
},
"uid0002" : {
"userInfo" : {
"email" : "firstName2.lastName2@email.com",
"firstName" : "firstName2",
"lastName" : "lastName2",
"uid" : "uid0002"
}
}
}
}

这是我尝试查询数据库的示例函数

func performQuery(forName queryText:String)
{
let key = "firstName"

let ref1 = firebaseDatabaseManager.allUsersRef.queryOrdered(byChild: queryText)
let ref2 = firebaseDatabaseManager.allUsersRef.queryEqual(toValue: queryText, childKey: key)

//ref.observeSingleEvent(of: .childAdded, with: {(snapshot) in
ref1.observe(.childAdded, with: {(snapshot) in

let userId = snapshot.key

if let dictionary = snapshot.value as? [String: AnyObject]
{
if let userInfo = dictionary["userInfo"] as? [String:AnyObject]
{
if
let email = userInfo["email"] as? String,
let firstName = userInfo["firstName"] as? String,
let lastName = userInfo["lastName"] as? String
{
let user = User.init(withFirst: firstName, last: lastName, userEmail: email, uid: userId)
}
}
}
})
}

你可以在这里看到我有两个关于我如何构建 ref 的例子和两个我如何观察引用的例子,尽管我已经尝试了我能想到的所有可能的组合。

如果我使用 ref.observe(....无论 queryText 是否实际存在,该 block 都将为节点上的所有用户执行。如果我使用 ref.observeSingleEvent(of:....该 block 将为 json 结构中最顶层的用户执行。

最重要的是,我尝试了几种完全不返回任何内容的引用变体。

非常感谢任何帮助!谢谢

最佳答案

您需要结合使用 queryOrderedByChild:queryEqualToValue: 以获得正确的结果:

let query = firebaseDatabaseManager.allUsersRef
.queryOrdered(byChild: "userInfo/" + key)
.queryEqual(toValue: queryText)

query.observe(.childAdded, ...

关于ios - 使用 Swift 的 Firebase 查询无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42091762/

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