Results
- auto generated ID
- auto generated ID
value1: abc
value2: def
我希望能够查询“value2”等于某个特定值的位置。我从一个参考文献开始:
let ref = FIRDatabase.database().reference().child("Results")
由于我不知道自动生成的ID以提供路径,我是否需要先获取它们才能使用.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。
如果我这样做:
self.ref.queryOrdered(byChild: "value2").observeSingleEvent(of: .childAdded, with: {(snapshot) in
它实际上会正确地对数据进行排序。它不会与".value"
正确排序无论如何,添加queryEqual
然后无法正常工作。
答案 0 :(得分:4)
Firebase数据库查询的属性比运行它们的位置深一级。它们不能包含动态路径。
由于您是从/Results
查询的,因此可以按/Results/$id/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) })