Firebase queryOrderedbyChild不会返回Null值

时间:2017-06-16 22:37:24

标签: ios swift firebase firebase-realtime-database

我有一个根据用户年龄搜索用户的查询:

self?.ref.child("users").queryOrdered(byChild: "age").queryStarting(atValue: "18").queryEnding(atValue: "25").observeSingleEvent(of: .childAdded, with:  { (snapshot) in
    print(snapshot)

我的Firebase结构如下:

users
    -> uid1
        -> age : "18"
        -> name : "Lisa"
        -> ...
    -> uid2
        -> age : "18"
        -> name : "Elizabeth"
        -> ...

在我的数据库中,有两个人有年龄:" 18"。

当queryStartingAtValue为" 18"时,一切正常。

当我将queryStartingAtValue更改为不存在的年龄(例如" 19")时会出现此问题。

实际上,没有返回结果,数据似乎在查询中被阻止。

你知道这个查询有什么问题吗?

THX。

1 个答案:

答案 0 :(得分:0)

在您显示的数据中,没有19或更高的节点,因此查询与任何节点都不匹配。在这种情况下,.childAdded事件不会触发。

如果您想要检测到这种情况,您必须听取.value事件,即使没有孩子, 也会触发。但在这种情况下,您将为所有匹配的子项设置一个.value个事件,因此您需要loop over the child nodes

self?.ref.child("users")
  .queryOrdered(byChild: "age").queryStarting(atValue: "18")
  .queryEnding(atValue: "25")
  .observeSingleEvent(of: .value, with:  { (snapshot) in
    print(snapshot.exists())
    for child in snapshot.children {
      ...
    }