这可能是一个奇怪的问题。然而,我的firebase数据库的免费配额快用完了,在开始付钱之前,我想优化一些我的firebase查询。
我观察了firebase控制台,我们可以在其中管理数据库,我注意到它只显示每个级别上的节点。要查看子节点,我们必须单击+按钮(在节点名称旁边)或节点本身。
我相信这种行为是为了避免一次请求整个数据库,这会导致巨大的流量和资源消耗。我也相信firebase控制台是建立在firebase公共API之上的,所以我们应该可以实现相同的行为。
我的问题是考虑以下数据库:
{
"root":{
"node1":{
"childA":"a",
"childB":"b",
"childC":"c"
},
"node2":{
"childA":"2a",
"childB":"2b",
"childC":"2c"
},
"node3":{
"childA":"3a",
"childB":"3b",
"childC":"3c"
},
"node4":{
"childA":"4a",
"childB":"4b",
"childC":"4c"
},
"lululu":{
"childA":"1a",
"childB":"2b",
"childC":"3c"
},
"node1214":{
"childA":"1a",
"childB":"1b",
"childC":"1c"
},
"node10":{
"childA":"a",
"childB":"b",
"childC":"c"
}
}
}如何在没有内容的情况下获得root下的节点列表(例如,像["node1", "node2", "node3"...]这样的列表,或者作为适当的Map,但没有子数据(以减少带宽使用)?
发布于 2018-11-17 05:00:07
这对于任何移动SDK都是不可能的。只有使用shallow参数的REST API才能这样做。
发布于 2018-11-17 05:14:16
在我看来,数据结构应该尽可能扁平化,以避免嵌套数据。您可以考虑按如下方式重组数据。你可以考虑看看Firebase中的best practices of storing and organizing your data。
{
"root": {
"node1":"1",
"node2":"2",
"node3":"3"
},
"nodes" : {
"1": {
"childA":"a",
"childB":"b",
"childC":"c"
},
"2":{
"childA":"2a",
"childB":"2b",
"childC":"2c"
},
"3":{
"childA":"3a",
"childB":"3b",
"childC":"3c"
}
}
}当您获得项时,您也会获得该项下的子项。所以要避免嵌套你的数据。您也可以考虑检查answer here。
https://stackoverflow.com/questions/53345237
复制相似问题