iOS – Firebasefilter查询

我在Firebase中获得了分数节点:

而在分数节点下我的数据结构如下:

{ "jjTO29ziQ2SjrH5PFzY7ZMpSgjq1-Kak6FCyGtdy_kcEPd4K" = { jjTO29ziQ2SjrH5PFzY7ZMpSgjq1 = "-Kak6FCyGtdy_kcEPd4K"; score = 5; }; "jjTO29ziQ2SjrH5PFzY7ZMpSgjq1-KbE_pgfUsukOm4uW0bx" = { jjTO29ziQ2SjrH5PFzY7ZMpSgjq1 = "-KbE_pgfUsukOm4uW0bx"; score = 4; }; 

问题: 我可以按分数过滤数据吗?

我试过了:

 FIRDatabase.database().reference().child("scores").queryOrdered(byChild: "score").observeSingleEvent(of: .value, with: { (snapshot) in debugPrint(snapshot.value ?? "nil") }) 

但是不能得到结果?

图片1

当您对Firebase执行查询时,会得到一个FIRDataSnapshot ,其中包含每个结果的三条信息:

  • 它的关键
  • 它的价值
  • 它相对于其他节点的位置

当您调用snapshot.value ,快照将转换为字典。 不幸的是,字典只能保存键值对,所以你丢失了关于节点位置的信息。 所以,虽然快照中的数据实际上是正确sorting的,但您却将这些信息丢弃了。

解决scheme是使用FIRDataSnapshot的内置children属性以正确的顺序遍历子节点。 关于查询的Firebase文档有这样的例子:

 _commentsRef.observeEventType(.Value, withBlock: { snapshot in for child in snapshot.children { ... } })