C6S*_*ver 5 firebase swift firebase-realtime-database
Results
- auto generated ID
- auto generated ID
value1: abc
value2: def
Run Code Online (Sandbox Code Playgroud)
我希望能够查询“value2”在哪里等于某个特定值。我从一个参考开始:
let ref = FIRDatabase.database().reference().child("Results")
Run Code Online (Sandbox Code Playgroud)
由于我不知道自动生成的 ID 以便提供路径,我是否需要先获取它们才能确定可以使用的值.queryEqualToValue
?如果是这样,我是不是只是抓取每条记录来查找一个值,而不是使用某种索引来只抓取那些value2
等于某个值的记录?
最后,我想要一个查询,返回所有value2
等于某个值的“记录” 。感觉就像我需要遍历每条记录才能做到这一点。我觉得我在这里错过了一些东西。
更新:
我试过了:
self.ref.queryOrderedByKey().queryEqual(toValue: "def", childKey: "value2").observeSingleEvent(of: .value, with: {(snapshot) in
print(snapshot) })
Run Code Online (Sandbox Code Playgroud)
这会因我在下面的评论中给出的错误而崩溃。
我试过了:
self.ref.queryOrdered(byChild: "value2").queryEqual(toValue: "def").observeSingleEvent(of: .childAdded, with: {(snapshot) in
Run Code Online (Sandbox Code Playgroud)
这永远不会执行闭包。如果我将观察者更改为".value"
它返回 null。
如果我这样做:
self.ref.queryOrdered(byChild: "value2").observeSingleEvent(of: .childAdded, with: {(snapshot) in
Run Code Online (Sandbox Code Playgroud)
它实际上会对数据进行正确排序。".value"
不管怎样,它都不会正确排序,添加queryEqual
then 不起作用,如上所述。
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"
Run Code Online (Sandbox Code Playgroud)
现在您可以通过以下方式查询:
ref.child("ResultValues")
.queryOrderedByChild("value")
.queryEqual(toValue: "def")
.observeSingleEvent(of: .value, with: {(snapshot) in
print(snapshot) })
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1786 次 |
最近记录: |