Results - auto generated ID - auto generated ID value1: abc value2: def
我希望能够查询“ value2”等于某个特定值的位置。我从参考开始:
let ref = FIRDatabase.database().reference().child("Results")
由于我不知道自动生成的ID才能提供路径,因此我需要先获取它们才能确定可以使用的值.queryEqualToValue?如果是这样,我是否不仅要获取每条记录以查找值,还是要使用某种索引仅获取value2等于值的索引?
.queryEqualToValue
value2
最后,我想查询一个返回value2等于某个值的所有“记录”的查询。感觉我需要遍历每条记录才能做到这一点。我觉得我在这里缺少什么。
更新:
我试过了:
self.ref.queryOrderedByKey().queryEqual(toValue: "def", childKey: "value2").observeSingleEvent(of: .value, with: {(snapshot) in print(snapshot) })
这会因我在下面的评论中给出的错误而崩溃。
self.ref.queryOrdered(byChild: "value2").queryEqual(toValue: "def").observeSingleEvent(of: .childAdded, with: {(snapshot) in
这永远不会执行关闭。如果我将观察者更改为".value"它,则返回null。
".value"
如果我这样做:
self.ref.queryOrdered(byChild: "value2").observeSingleEvent(of: .childAdded, with: {(snapshot) in
实际上,它将正确地对数据进行排序。".value"无论如何,它将无法正确排序,因此queryEqual如上所述无法进行添加。
queryEqual
Firebase数据库查询属性的深度比您运行它们的位置高一级。它们下不能包含动态路径。
由于您要从进行查询/Results,因此您可以根据对其属性进行排序/过滤/Results/$id/PropertyName。
/Results
/Results/$id/PropertyName
要允许对属性下的所有项目进行排序/过滤,/Results/$id1/$id2/PropertyName您需要更改/增强数据结构。例如:
/Results/$id1/$id2/PropertyName
ResultValues -auto_generated_ID1_auto_generated_ID2_value1 value: abc path: "auto generated ID/auto generated ID" -auto_generated_ID1_auto_generated_ID2_value2 value: def path: "auto generated ID/auto generated ID"
现在您可以查询:
ref.child("ResultValues") .queryOrderedByChild("value") .queryEqual(toValue: "def") .observeSingleEvent(of: .value, with: {(snapshot) in print(snapshot) })