【问题标题】:Firebase Firestore : How to structure dataFirebase Firestore:如何构建数据
【发布时间】:2018-03-20 06:45:57
【问题描述】:

好吧,根据文档,这个答案https://stackoverflow.com/a/46639620/2873357,集合和文档应该交替。

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

"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 控制台中实现这种功能。

【问题讨论】:

  • 嗨尝试扁平化firebase结构,为通知创建单独的节点,在用户ID下存储用户的通知...如果您使用嵌套一个,则需要时间来获取数据
  • @Shanmugam 请忽略时间,我仍然需要按照我的要求这样做。
  • 您遇到什么问题,您的要求是什么
  • 我的要求是以我在问题中指定的格式获取 json。
  • Collections 和 Documents 是不同的东西,您不能互换使用它们。将原始 JSON 映射到 Cloud Firestore 而不对其进行调整以匹配 Cloud Firestore 的数据模型可能效果不佳。您要么坚持使用实时数据库(其数据模型更灵活),要么调整您的数据模型以更好地与 Cloud Firestore 配合使用。

标签: java android firebase google-cloud-firestore


【解决方案1】:

如果我对您的理解正确,那么您尝试做的事情是不可能的。集合和文档交替的要求意味着您不能真正将集合直接嵌套在集合中。通过使用你的 $uid 作为集合来伪造它最终不会很好地工作。

因此,如果没有要放入集合中的实际文档,通常的解决方案是命名一个您不打算创建的固定文档。例如,如果现在只有一个应用,请在路径中插入一个额外的“0”、应用名称或类似名称:

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

在 auto-gen-id 通知文档中,您将拥有您的类型和子类型字段。

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

【讨论】:

  • 1+,“但集合和文档的结构本身并不是 JSON。”,好吧,我没有得到那部分。我将不得不进一步调查。
【解决方案2】:

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

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

您可以尝试使用您的实际数据结构,但最好重新排列一下以适应 Firestore 数据结构。

【讨论】:

  • 为什么“应该”是“用户”,我认为这是不正确的。任何成熟的数据库都不应该强制执行这种想法。
  • 我说的是“应该”,而不是“必须”。那里有区别。我的观点是你可以有多个根集合。 Firestore 是唯一允许在必要时进行深度嵌套的 Firebase,但仍然是无 SQL 数据库
  • @Relm 我认为这个答案不值得反对。 Andy 的意思是你需要从一个集合开始,因为这就是 Firestore 结构的工作方式。它不仅仅是一个 JSON 对象存储。
【解决方案3】:

你的路径应该是

User/UserId/Notifications/NotificationId/NotificationObject

请通过以下链接找到 Firebase 团队的建议:https://cloud.google.com/firestore/docs/concepts/structure-data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-13
    • 2018-06-28
    • 2021-07-25
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    相关资源
    最近更新 更多