"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 是基于体积的。
我想知道是否有任何查询来计算根节点中“已见”键为“真”或根节点中“已见”键为“假”的对象的数量。
更新:
数据结构
John 和Harry 是用户唯一ID。节点 David 是 John 节点的直接子节点,是用户之前与之聊天的人的唯一 ID。
KIMA0aPsujdAOpkzP0w 节点表示从用户 John 到/从 David 发送的唯一消息。
所以我想要计算从 David 到 John 没有被 John 看到的消息数量
最佳答案
如果您只想获得“看到”的值,您应该重新考虑您的数据库结构并在可能的情况下进行非规范化,以尽可能快地读取数据。
保持结构以获得“已见”值,每次读取时都必须获取整个节点并循环遍历它以获取值,下载不必要的数据,浪费处理时间并使整体操作变慢。
您应该创建一个新节点,并按照稍后获取它的方式仅存储“看到的”值。比方说,构建数据库的最佳方式是基于将执行哪些读取操作以及在这些操作中您需要哪些数据。
您不必担心数据重复。请记住,Firebase 具有“updateChildren”方法,允许您在单个操作中更新不同节点中的数据。
有关更多信息,您可以在此处阅读有关结构化数据的文档:https://firebase.google.com/docs/database/android/structure-data
干杯!
关于ios - 如何在 Firebase 中查询嵌套元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37372879/