2017-10-09 63 views
1

那么,根据文档,这个答案https://stackoverflow.com/a/46639620/2873357,集合和文档应该齐射。Firebase Firestore:如何构造数据

我需要保存数据以这种方式构造:

"app" :{ 
    "users" :{ 
       "$uid" :{ 
         "notifications":{ 
            "auto-gen-id" :{ 
                "notif-object":{ 
                   "type":"", 
                   "subType" : "" 
                } 
             } 
         } 
       } 
     } 
} 

所以,我理解这一点,这就是,

 : "app (collections)/ 
       users (document)/ 
        $uid (collections)/ 
         notifications (document)/ 
           auto-gen-id (collections)/ 
            "notif-object" (document)/ 
                type (field), 
                subType (field) 

我似乎无法达到这种事在Firebase控制台中。

+0

喜尽量扁平化火力结构,为通知创建单独的节点,在用户ID存储用户的通知...如果你使用嵌套一个,它将需要一些时间来获取数据 – Shanmugam

+0

@Shanmugam请忽略时间,我仍然需要完全按照我的要求。 – Relm

+0

你得到什么问题,你的要求是什么 – Shanmugam

回答

0

你拥有的第一个集合应该是用户而不是应用程序。 然后,用户集合包含每个用户文档,那么文档可以包含子集合和文档。

在根级别,您可以拥有多个集合。

您可以尝试坚持使用您的实际数据结构,但也许最好重新安排它以适应Firestore数据结构。

+0

为什么“应该”是“用户”,我认为这是不正确的。任何成熟的数据库都不应该强制这种想法。 – Relm

+0

我说“应该”,而不是“必须”。那里有区别。 我的观点是你可以拥有多个根集合。 Firestore只有Firebase允许深层嵌套当需要时,但仍然是一个没有SQL数据库 –

+0

@Relm我不认为这个答案值得downvote。安迪的意思是你需要从一个集合开始,因为这就是Firestore结构的工作原理。它不仅仅是一个JSON对象存储。 – gligoran

2

如果我正确地理解了你,你想要做的事情是不可能的。集合和文档交替的要求意味着您不能真正直接在集合中嵌套集合。通过使用$ uid作为集合来欺骗它并不会最终奏效。

因此,当没有真正的文档放入集合时,通常的解决方案是命名您不打算创建的固定文档。例如,如果有永远只能在一个应用程序现在,插入一个额外的“0”,应用程序名称,或类似的东西在路径:

app/0/users/userId/notifications/{auto-gen-id} 

内的自动-GEN-ID通知文件,你会然后有你的类型和子类型字段。

请注意,不像Firebase RTBD Firestore不是一个巨大的JSON文档。集合中的每个文档都是JSON,但集合和文档的结构本身不是JSON。

+0

1+“,但是收集和文档的结构本身并不是JSON。”,好的,我没有得到那部分。我必须进一步研究。 – Relm