当前位置: 首页 > 知识库问答 >
问题:

Firebase实时数据库查询不工作

糜昌胤
2023-03-14

我正在尝试检索一些值而不是其他值。事实上,我想通过用户的名字来搜索他们。

我尝试使用querystarting(atvalue:input)queryending(atvalue:“u{f8ff}”),但找不到正确的解决方案。

let input = searchInput.text?.lowercased()
print("Search for \(input!)")
let ref = Database.database().reference().child("Usernames").queryStarting(atValue: input).queryEnding(atValue: "u{f8ff}").queryOrderedByKey()

ref.observeSingleEvent(of: .value) { (snapshot) in
    if snapshot.exists() {
        for users in snapshot.children.allObjects as! [DataSnapshot] {
            let user = users.value as? [String:AnyObject]
            let id = user?["id"] as! String
            Users.init(userId: (id))
            print(users.key)
        }
    }
}

如您所见,我还添加了querYorderedByKey()。如果我不添加那个部分,它就不会检索任何东西。我想要的只是从我在TextField中所写的内容开始检索值。

Usernames
----- charles
----------id: charles's uid
----- pierre
----------id: pierre's uid
----- bob
----------id: bob's uid
----- lu
----------id: lu's uid

共有1个答案

邢嘉祯
2023-03-14

当前查询从正确的输入开始,但以U{f8ff}结束-这意味着如果开始BO,还会得到以CD等开头的单词。

您需要做的是以字符串开头的最高值结束,例如,对于bo的输入,您希望以bo\u{f8ff}结束。您可以通过将输入与unicode值连接起来来实现这一点,即:

...queryEnding(atValue: input + "\u{f8ff}")... // <-- Also note that the unicode character is escaped here
 类似资料:
  • 我有一个firebase数据库,员工数据的结构如下。我还有一个用户表,它具有'Company ID'属性。每次用户登录时,我都希望获取与用户“公司ID”匹配的所有员工。是否有可能实现这使用firebase数据库规则或我必须写一些查询。

  • 3.移除值事件侦听器和脱机的区别。

  • 该库只支持Double、Boolean和String。我现在真困惑。怎么可能?

  • 但结果是一样的。 这是我的.hbm.xml文件中的内容: 对于用户: 我做错了什么?如果查询参数不是“简单”类型,我需要做一些特殊的事情吗?

  • 我在一个Android应用程序中使用Firebase数据库,每次用户启动时,我都会在数据库中存储一些值,为此我会执行以下操作: 正如您在子方法中看到的,如果称为“usrId”,它将创建usrId目录,并在其中添加所有neccesary信息。但是我想为每个用户创建目录,所以我尝试传递usrId变量作为参数。但它不起作用。当我调试代码时,调试器说本地var usrId无法识别,我的问题是如何在Fire

  • 当我试图删除或编辑实时数据库中的节点时,我总是得到这样的信息:我必须选择一个元素较少的键来更改某些内容,否则它是只读的。 但是当我单击低级节点时,没有任何反应。因此,我实际上可以从控制台:( 一周前,我没有看到这个警告,一切都很好!知道如何回到工作版本吗? 我也觉得德语翻译的不太好,因为它告诉我应该激活另一种模式。用英语说,模式被激活。