【问题标题】:Firebase query in swift not working properly as usualswift中的Firebase查询无法像往常一样正常工作
【发布时间】:2017-06-26 12:09:16
【问题描述】:

我有这样的 firebase 数据库结构

我想要的是那些在“请求/等待”位置以字符串“48DqysTKV0cMGf8orGlfhNaFLEw2”开头的数据

我的代码如下

但此代码返回等待节点中的所有数组而不是特定节点

【问题讨论】:

  • 以图片形式发布的代码不受欢迎。请将您的代码作为问题的一部分发布。
  • 如果有帮助,请将我的帖子标记为答案(按寒鸦),让其他人知道它是正确的
  • 它不适合我
  • 我需要所有以子字符串 '48DqysTKV0cMGf8orGlfhNaFLEw2' 开头的节点

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

原因是因为您使用的是.childAdded。调用时,最初它检索给定路径中的每个元素,然后开始仅监视添加的节点。更多info

在您的查询中使用.value

queryStarting(atValue) 不像你想象的那样工作。要实现您想要的,您需要将查询限制在某个范围/边界内。阅读不同的query types 并自行决定哪种组合有意义。

【讨论】:

  • .value 返回“请求/等待”位置中的所有数组,而不是我想要的匹配数据
【解决方案2】:

试试这个(我认为问题在childAdded。改成.value):

let ref = FIRDatabase.database()
              .reference(withPath: "request/waiting")
              .queryStarting(atValue: "48DqysTKV0cMGf8orGlfhNaFLEw2")
              .queryEnding(atValue: "48DqysTKV0cMGf8orGlfhNaFLEw2" + "\u{f8ff}")

ref.observeSingleEvent(of: .value, with: { snapshot in 
    if let data = snapshot.value as? [String: Any] {
        // code..
    }
})

上面查询中使用的 f8ff 字符是 Unicode 范围内的一个非常高的代码点。因为它在 Unicode 中的大多数常规字符之后,所以查询匹配所有以 48DqysTKV0cMGf8orGlfhNaFLEw2 开头的值。

希望对你有帮助

【讨论】:

  • 我需要等待以这个子字符串“48DqysTKV0cMGf8orGlfhNaFLEw2”开头的请求明白吗?
  • @user3755242 类型问题。应该使用 .value 而不是 .childAdded
  • 您的代码只返回一个快照,而不是所有以“48DqysTKV0cMGf8orGlfhNaFLEw2-23432424”开头的快照
  • @user3755242 仅在请求/等待中?你需要从开始
  • @VladPulichev 解释一下会很有用\u{f8ff}
猜你喜欢
  • 2016-06-01
  • 1970-01-01
  • 2016-09-07
  • 2019-09-07
  • 1970-01-01
  • 2019-01-08
  • 2013-06-06
  • 1970-01-01
相关资源
最近更新 更多