ios - 如何在 Firebase 中查询嵌套元素?

标签 ios objective-c swift firebase

    "John" : {
      "David" : {
        "-KIMA0aPsujdAOpkzP0w" : {
          "message" : "hallu",
          "sender" : "10154053432889835",
          "time" : 1463898873196
        }
      }
    },
    "Harry" : {
      "Christina" : {
        "-KIMA0aPsujdAOpkzP0v" : {
          "message" : "hallu",
          "seen" : true,
          "sender" : "self",
          "time" : 1463898873195
        }
      },
      "Pierce" : {
        "-KILZ_GH7Ji9hQYNK-6p" : {
          "message" : "Eli there.",
          "seen" : true,
          "sender" : "179914035712208",
          "time" : 1463888795301
        },
        "-KIM8yPz2UDOZwHEg_nn" : {
          "message" : "hahjajak",
          "seen" : true,
          "sender" : "self",
          "time" : 1463898597847
        },
}

我想查询顶部节点John OR Harry 的“seen”键值为“true”的节点数,其中有多个子节点并且每个子节点都有多个自动设置id的子节点。

我只想知道将“看到”键设置为true 的对象的数量以及将“看到”键设置为false 的对象的数量/p>

我可以提取节点中的所有值,如下所示:

ref.observeSingleEventOfType(.Value, withBlock: { snap in
    for (key,value) in snap.value as! NSDictionary {
    }
    
})

我可以循环遍历字典并手动计算对象的数量。但这在计算上或数据效率上都不是太高,因为 firebase 是基于体积的。

我想知道是否有任何查询来计算根节点中“已见”键为“真”或根节点中“已见”键为“假”的对象的数量。

更新:

数据结构

JohnHarry 是用户唯一ID。节点 DavidJohn 节点的直接子节点,是用户之前与之聊天的人的唯一 ID。

KIMA0aPsujdAOpkzP0w 节点表示从用户 John 到/从 David 发送的唯一消息。

所以我想要计算从 DavidJohn 没有被 John 看到的消息数量

最佳答案

如果您只想获得“看到”的值,您应该重新考虑您的数据库结构并在可能的情况下进行非规范化,以尽可能快地读取数据。

保持结构以获得“已见”值,每次读取时都必须获取整个节点并循环遍历它以获取值,下载不必要的数据,浪费处理时间并使整体操作变慢。

您应该创建一个新节点,并按照稍后获取它的方式仅存储“看到的”值。比方说,构建数据库的最佳方式是基于将执行哪些读取操作以及在这些操作中您需要哪些数据。

您不必担心数据重复。请记住,Firebase 具有“updateChildren”方法,允许您在单个操作中更新不同节点中的数据。

有关更多信息,您可以在此处阅读有关结构化数据的文档:https://firebase.google.com/docs/database/android/structure-data

干杯!

关于ios - 如何在 Firebase 中查询嵌套元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37372879/

相关文章:

iphone - 在图像上标记脸部和眼睛

ios - 优酷 : Multiple accounts authentication (OAuth) to upload video to single account/channel

iphone - 在哪里调用方法以重新加载应用程序从后台返回时的 View

ios - 使用 resizableImageWithCapInsets 崩溃 :UIEdgeInsetsMake

objective-c - 在类方法错误中访问实例变量 'variable'

iphone - Xcode - 图像编辑

ios - UITextView中触发超链接文本点击和普通文本点击

ios - 当 MIDI 目标或源更改时收到通知

ios - iOS 11 中的状态栏框架

ios - 如何在UIImagePickerController的自定义控件中使用不同模式之间的切换?