我对Firebase及其json数据库还不熟悉。所以现在我正在设计树层次结构,但在阅读文档时,它说“当你在数据库中的某个位置获取数据时,你也会检索它的所有子节点”。
我明白这意味着如果你有这个
a1
—b1
——c1
——c2
———d1
———d2
———d3
———d4
—b2
——c1
——c2
———etc…
并且你想要获取“c1”,你不仅会下载“c1”而是“c2”和所有“d”。它是有道理但在文档中的例子中它表示列出所有“c1”需要从“a1”下载整个树。
我说错了吗?如果是这样,我如何为需要按用户组和所有内部共享信息隔离数据的树建模?
答案 0 :(得分:1)
您可以通过创建对它的引用来寻址树中的每个节点。但是,如果您检索节点的值,您还将获得其下的每个节点。
因此,如果您将听众附加到/a1/b1
:
var root = firebase.database().ref();
root.child('a1/b1').on('value', ...
您将获得c1,c2,d1,d2,d3和d4。
但如果你直接解决c1
,你将只得到那个节点:
root.child('a1/b1/c1').on('value', ...
答案 1 :(得分:0)
我有一些很好的例子。
在这种情况下,如果不下载所有帖子,则无法访问用户的“名称”:
{
"users": {
"user1": {
"name": "John",
"posts": {
"post1": {...},
"post2": {...}
}
},
"user2": {
"name": "Nate",
"posts": {
"post1": {...},
"post2": {...}
}
},
"user3": {
"name": "Buck",
"posts": {
"post1": {...},
"post2": {...}
}
}
}
}
Denormalize您的数据库,以便更好地查询和获取数据:
{
"users": {
"user1": {
"name": "John",
"posts": {
"post2": true,
"post5": true
}
},
"user2": {
"name": "Nate",
"posts": {
"post1": true,
"post6": true
}
},
"user3": {
"name": "Buck",
"posts": {
"post3": true,
"post4": true
}
}
},
"posts":{
"post1":{
...,
"user":"user2"
},
"post2":{
...,
"user":"user1"
},
"post3":{
...,
"user":"user3"
},
"post4":{
...,
"user":"user3"
},
"post5":{
...,
"user":"user1"
},
"post6":{
...,
"user":"user2"
},
}
}