swift中的Firebase查询无法像往常一样正常工作

时间:2017-06-26 12:09:16

标签: ios swift firebase firebase-realtime-database

我有这样的firebase数据库结构 enter image description here

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

我的代码如下所示 enter image description here

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

2 个答案:

答案 0 :(得分:0)

试试这个(我认为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开头的所有值。

希望有所帮助

答案 1 :(得分:0)

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

在查询中使用.value

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