如何根据firebase

时间:2016-09-24 05:42:07

标签: firebase firebase-realtime-database

我对Firebase及其json数据库还不熟悉。所以现在我正在设计树层次结构,但在阅读文档时,它说“当你在数据库中的某个位置获取数据时,你也会检索它的所有子节点”。

我明白这意味着如果你有这个

a1
—b1
——c1
——c2
———d1
———d2
———d3
———d4
—b2
——c1
——c2
———etc…

并且你想要获取“c1”,你不仅会下载“c1”而是“c2”和所有“d”。它是有道理但在文档中的例子中它表示列出所有“c1”需要从“a1”下载整个树。

我说错了吗?如果是这样,我如何为需要按用户组和所有内部共享信息隔离数据的树建模?

2 个答案:

答案 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"
    },
  }
}