Swift:为用户搜索 Firebase 数据库

Posted

技术标签:

【中文标题】Swift:为用户搜索 Firebase 数据库【英文标题】:Swift: Searching Firebase Database for Users 【发布时间】:2017-04-13 17:34:10 【问题描述】:

我一直在寻找整个互联网和堆栈溢出,但没有找到任何我理解的足以实施到我的解决方案中的东西。 那里有很多类似的问题,但没有一个建议的解决方案对我有用,所以我会问你们。

如何在我的 Firebase 数据库中快速搜索用户名? 在我的应用程序中,我有一个视图应该允许用户在数据库中搜索朋友。结果应该实时更新,这意味着每次用户键入或删除字符时,结果都应该更新。到目前为止,我所拥有的只是一个放置和设置样式的 UISearchBar,没有后端代码。

由于我真的不知道创建这样一个功能需要什么,如果你们能告诉我你需要什么来告诉我具体要做什么,那就太酷了。 (数据库结构,代码部分......)。我不想在这里复制和粘贴无用的东西。

非常感谢您的帮助。

编辑:

这是我的数据库结构:

"users"
    "uid"   // Automatically generated
        "goaldata"
             "..."   // Not important in this case
        "userdata"
             "username"
             "email"
             "country"
             "..."  // Some more entries not important in this case

希望我做得对,我真的不知道如何在这里发布。

【问题讨论】:

能否请您显示firebase数据库结构,只有这样才能识别适用的查询。 @JenJose 会的,等一下。 @JenJose 你去吧,我希望能完成这项工作。 【参考方案1】:

假设 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”表示*(任意)。

let strSearch = "je"
baseRef.child("users").queryOrdered(byChild:  "userData/username").queryStarting(atValue: strSearch , childKey: "username").queryEnding(atValue: strSearch + "\uf8ff", 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 + "\uf8ff").observeSingleEvent(of: .value, with:  (snapshot) in

  print(snapshot)

)

请注意此方法区分大小写。 search String = "je" 和 "Je" 的搜索结果会不同,查询会匹配大小写。

【讨论】:

非常感谢@JenJose!我一到我的电脑就试试。我会回复你的! 我如何将它链接到 UISearchBar?对不起,我很菜鸟:) 你必须在 func searchBar(searchBar: UISearchBar, textDidChange searchText: String) uisearchbar 的委托方法中应用查询并根据搜索结果重新加载表格。 .queryOrderedByKey("username") 部分说它不能接受参数 当我在搜索栏中输入内容并再次删除它时,我也只会得到一个值,这意味着它只会在搜索栏被清除时返回值。

以上是关于Swift:为用户搜索 Firebase 数据库的主要内容,如果未能解决你的问题,请参考以下文章

搜索 firebase 数据:iOS、Swift

Swift - 如何在 Firebase 上将排序查询创建为降序?

Firebase Firestore 数据库结构

(Swift 4) 如何在 firebase 中生成自定义自动 id?

如何使用 swift 有条件地向 Firebase Firestore 中的查询添加另一个过滤器?

过滤和显示来自 firebase 数据库的搜索栏结果