使用queryEqual to values的observeSingleEvent不起作用

时间:2018-04-06 10:04:16

标签: ios swift firebase firebase-realtime-database

所以,我想检查用户的设备是否在我的列表中(用于测试)。为此,我在Firebase数据集中有一小组值。

看起来像是这样的: Firebase

但是当我试图检查用户的id是否在此列表中时,我什么都没得到。

let childString = "tempfreeuuid/"
let pointref = ref.child(childString)
let query = pointref.queryOrderedByKey().queryEqual(toValue: "FFFFF")

query.observeSingleEvent(of: DataEventType.value) { (snapshot) in
    if snapshot.hasChildren() {
        print("that's good")
    } else {
        print("snapshot has no children")
    }
}

结果是“快照没有孩子”。

我已经尝试query.observeSingleEvent(of: .childAdded)(不起作用),.queryLimited(toFirst: 3).queryOrderedByKey() - 这两个也不起作用。

同时,如果我不尝试使用queryEqual,则此查询正在运行。

我做错了什么?

更新:我想澄清一下我遇到的问题。我没有任何结果,快照为空。同时,如果我使用的是queryLimited(toFirst: 1)而不是queryEqual,我会从表中获得一个结果。在我看来,它不是关于快照问题,而是关于查询而没有任何结果。

1 个答案:

答案 0 :(得分:2)

您使用了错误的OrderedBy方法。因为您正在使用queryOrderedByKey,所以queryEqual函数会检查它是否等于Key,同时您要将其与Value进行比较。

相反,您应该使用queryOrderedByChildqueryOrderedByValue来确保比较正确的值。

Here is the reference to the firebase docs解释了查询(特别是您的案例中queryEqualToValue)的工作方式。