use*_*063 0 ios firebase swift firebase-realtime-database
我在Firebase中获得了分数节点:
在得分节点下我的数据结构如下:
{
"jjTO29ziQ2SjrH5PFzY7ZMpSgjq1-Kak6FCyGtdy_kcEPd4K" = {
jjTO29ziQ2SjrH5PFzY7ZMpSgjq1 = "-Kak6FCyGtdy_kcEPd4K";
score = 5;
};
"jjTO29ziQ2SjrH5PFzY7ZMpSgjq1-KbE_pgfUsukOm4uW0bx" = {
jjTO29ziQ2SjrH5PFzY7ZMpSgjq1 = "-KbE_pgfUsukOm4uW0bx";
score = 4;
};
Run Code Online (Sandbox Code Playgroud)
问题: 我可以按分数过滤数据吗?
我试过做:
FIRDatabase.database().reference().child("scores").queryOrdered(byChild: "score").observeSingleEvent(of: .value, with: { (snapshot) in
debugPrint(snapshot.value ?? "nil")
})
Run Code Online (Sandbox Code Playgroud)
但是不能得到结果?
当您对Firebase执行查询时,您会得到一个FIRDataSnapshot包含每个结果的三条信息:
当您调用snapshot.value快照时,将转换为Dictionary.不幸的是,该字典只能保存键值对,因此您将丢失有关节点位置的信息.因此,虽然快照中的数据实际上是正确排序的,但您将丢弃该信息.
解决方案是使用FIRDataSnapshots内置children属性以正确的顺序循环子节点.有关查询的Firebase文档中有如何执行此操作的示例:
_commentsRef.observeEventType(.Value, withBlock: { snapshot in
for child in snapshot.children {
...
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
487 次 |
| 最近记录: |