我有一个根据用户年龄搜索用户的查询:
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。
答案 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 {
...
}