【问题标题】:Firebase queryOrderedbyChild doesn't return a Null valueFirebase queryOrderedbyChild 不返回 Null 值
【发布时间】:2017-06-16 22:37:24
【问题描述】:

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

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”)时会出现问题。

确实,没有返回任何结果,数据似乎在查询中被阻塞了。

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

谢谢。

【问题讨论】:

  • 你能解释一下“在查询中被阻塞”是什么意思吗
  • 嗨!该查询不返回任何值,甚至不返回 null。没发生什么事。我尝试使用 .value 而不是 .childAdded ,当它与年龄不匹配时它返回 null 。 .childAdded 的这个问题使我无法检查 snapshot.exists () 是否存在。

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

在您显示的数据中没有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 {
      ...
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2021-09-28
    • 2020-01-26
    • 1970-01-01
    • 2019-08-05
    • 2017-02-19
    相关资源
    最近更新 更多