【问题标题】:QnA application with flutter: Adding stream of comments [closed]颤振的 QnA 应用程序:添加评论流 [关闭]
【发布时间】:2020-10-13 03:18:00
【问题描述】:

我正在构建一个论坛应用程序,到目前为止,我已将数据结构化为私人帖子(在每个用户下,因为有一个部分供用户仅查看他们的帖子)和公共帖子(在集合“公共”下,以便每个人都可以查看彼此的帖子)。现在我想实现一个评论系统。我应该如何构建数据?我应该在每个 documentid(每个帖子)下创建一个子集合“cmets”还是在 firebase 的用户级别创建一个集合“cmets”?

[![用户等级']

[![收藏下'public']

[![在集合'public'的子集合中,documentid代表该类别下每个帖子的ID(论坛,反馈和笔记)']

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore document


    【解决方案1】:

    这更像是一个基于意见的问题,这意味着有多个解决方案。但是,我的方法与此类似,您可以对其进行修改,或者可能会受到启发以获得更好的解决方案:

    1. 您必须在每个帖子下添加 2 个附加字段 private (boolean )users (字符串数组)
    2. 现在您可以使用Simple queries 查询帖子,例如postRef.where('private', '==', false); 这将帮助您始终加载非私密帖子。
    3. 然后您可以使用附加的Array membership 查询私人帖子,例如postRef.where('private', '==', true).where('users', 'array-contains', 'UID');UID 是查看论坛页面的当前登录用户的 UID。当您查询此帖子时,您将能够获取所有私人帖子,但只能获取数组中包含用户 UID 的帖子。
    4. 每个帖子都可以有一个 JSON obj 数组,类似于{ timestamp: number, comment: string, UID: string }。此字段将帮助您跟踪特定帖子的所有 cmets。但是,能够发布和阅读它们的用户将根据上述字段usersprivate进行控制。
    5. 另一方面,如果论坛预计有数千个 cmets,则建议将 cmets 放在单独的数据库中,例如 Realtime Database。您可以将它们结构化为posts/[POST_ID]/comments/,其中POST_ID 是分配给Firestore 数据库中每个文档的参考。然后在您的帖子下,您可以完全删除它,而不是将 comments 作为 JSON obj 数组。因此,当您将根据上述查询字段查询文档时,API 还将返回文档密钥 (POST_ID),您可以使用它从实时数据库中查询 cmets。如需更多信息,请访问Reading and writing data
    6. 此外,您可以在数据库中实施规则,以确保完全限制查询私人帖子的用户的访问权限。这些规则更复杂,更多信息可以在Get started with Cloud Firestore Security Rules 中找到。但是,即使目前没有规则,您也应该没问题。

    话虽如此,请记住这是用例场景的众多方法之一,并且可能有更多更好的方法来实现相同的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 2016-03-21
      • 2022-01-21
      • 2020-09-03
      • 1970-01-01
      相关资源
      最近更新 更多