从Firebase中的2个集合中获取数据

时间:2018-11-26 08:37:36

标签: firebase firebase-realtime-database

我在下面提到了db结构,其中用户主数据保存在users集合中,图像保存在users_slug集合中,我将users集合节点密钥保存为{ {1}}集合因此,基本上我将拥有一个主集合和许多子集合,因此我需要基于主表记录节点键(基本上是一对多关系)来获取所有子数据,从而可以基于子表执行CRUD操作在主节点密钥上。

我有2个查询....

1)下面提到的db结构是好的方法吗? (因为我是Firebase的新手,所以进行了很多搜索,但没有找到任何相关内容)

2)如何根据节点密钥对两个集合执行访存?

users_slug

1 个答案:

答案 0 :(得分:1)

(如果我正确理解了您的需求),可以通过在每个slug节点下复制每个用户的user数据来使数据标准化,如下所示。

这样,您只需要一个查询就可以获取给定用户的所有“子弹”。

如果需要进行一些特定的查询,则可以保留users_slug节点(即“集合”以使用帖子的词汇表)。 (例如,查询-LSDmLgLW9KgTg1BpsxX节点-或未来的兄弟姐妹-,但不清楚这个uniqueId是什么。)

去规范化在NoSQL世界中非常普遍,您应该毫不犹豫地复制数据,以优化查询。请注意,要同时写入两个(或多个)节点,为了管理数据一致性,可以使用update()方法,请参阅文档herehere

{
    "users": {
        "-LSDmLO1GyfbumPZPopb": {
            "first_name": "test",
            "gender": "M",
            "last_name": "test123",
            "username": "test123"
            "slugs": {
                 "-LSDmLgLW9KgTg1BpsxX": [
                            {
                                "new_file_name": "5bfb97e92dbde.jpg",
                                "original_file_name": "128483.1.jpg"
                            },
                            {
                                "new_file_name": "5bfb97e92dd09.jpg",
                                "original_file_name": "amit.jpg"
                            },
                            ....
                  ]

    }
  },
  "users_slug": {
        "-LSDmLgLW9KgTg1BpsxX": [
            {
                "new_file_name": "5bfb97e92dbde.jpg",
                "original_file_name": "128483.1.jpg",
                "user_id": "-LSDmLO1GyfbumPZPopb"
            },
            ..........
        ]
    }
}

最后,您可以观看有关“ SQL开发人员的Firebase数据库” https://www.youtube.com/playlist?list=PLl-K7zZEsYLlP-k-RKFa7RyNPa9_wCH2s的官方Firebase视频系列,尤其是有关非规范化的第六视频https://www.youtube.com/watch?v=vKqXSZLLnHA&index=7&list=PLl-K7zZEsYLlP-k-RKFa7RyNPa9_wCH2s&t=0s