作者:mobiledu2502883017 | 来源:互联网 | 2023-02-06 17:30
我一直在寻找互联网和堆栈溢出,但没有找到任何我理解得足以实现我的解决方案.有很多类似的问题,但没有提出的解决方案对我有用,所以我会问你们.
如何在我的Firebase数据库中搜索swift中的用户名?在我的应用程序中,我有一个视图,应该允许用户在数据库中搜索朋友.结果应实时更新,这意味着每次用户键入或删除结果应更新的字符.到目前为止,我所有的UISearchBar都是放置和设计的,没有后端代码.
由于我真的不知道创建这样一个功能需要什么,如果你们能告诉我你需要告诉我到底该做什么,那将会很酷.(数据库结构,代码部分......).我不想在这里复制和粘贴无用的东西.
我真的很感激帮助.
编辑:
这是我的数据库结构:
"users"
"uid" // Automatically generated
"goaldata"
"..." // Not important in this case
"userdata"
"username"
"email"
"country"
"..." // Some more entries not important in this case
希望我做得对,不知道如何在这里发布.
1> Jen Jose..:
假设Firebase结构是这样的
例1:
users
-> uid
->otherdata
->userdata
->username : "jen"
-> other keys
-> uid2
->otherdata
->userdata
->username : "abc"
-> other keys
并且要基于用户名进行查询,我们需要查询queryOrdered(byChild:"userData/username").queryStarting&queryEndingAt,从"je"开始获取所有名称,此"\ uf8ff"表示*(any).
let strSearch = "je"
baseRef.child("users").queryOrdered(byChild: "userData/username").queryStarting(atValue: strSearch , childKey: "username").queryEnding(atValue: strSearch + "\u{f8ff}", childKey: "username").observeSingleEvent(of: .value, with: { (snapshot) in
print(snapshot)
}) { (err) in
print(err)
}
如果用户名直接位于用户节点下方,请尝试此操作
例2:
users
-> uid
->username : "jen"
-> other keys
-> uid2
->username : "abc"
-> other keys
查询将重组如下,
let strSearch = "je"
baseRef.child("users").queryOrdered(byChild: "username").queryStarting(atValue: strSearch).queryEnding(atValue: strSearch + "\u{f8ff}").observeSingleEvent(of: .value, with: { (snapshot) in
print(snapshot)
})
请注意,此方法区分大小写.搜索String ="je"和"Je"的搜索结果将不同,查询将与案例匹配.