查询Firebase中的AutoID以下

时间:2016-11-21 05:06:39

标签: swift firebase firebase-realtime-database

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然后无法正常工作。

1 个答案:

答案 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) })