当前位置:  开发笔记 > 编程语言 > 正文

iOS - Firebase过滤器查询

如何解决《iOS-Firebase过滤器查询》经验,为你挑选了1个好方法。

我在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



1> Frank van Pu..:

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

它的关键

它的价值

它相对于其他节点的位置

当您调用snapshot.value快照时,将转换为Dictionary.不幸的是,该字典只能保存键值对,因此您将丢失有关节点位置的信息.因此,虽然快照中的数据实际上是正确排序的,但您将丢弃该信息.

解决方案是使用FIRDataSnapshots内置children属性以正确的顺序循环子节点.有关查询的Firebase文档中有如何执行此操作的示例:

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

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有