Firebase 带颤振的QnA应用程序:添加评论流

Firebase 带颤振的QnA应用程序:添加评论流,firebase,flutter,dart,google-cloud-firestore,document,Firebase,Flutter,Dart,Google Cloud Firestore,Document,我正在构建一个论坛应用程序,到目前为止,我已经将数据结构化为私人帖子(在每个用户下,因为有一个部分供用户仅查看其帖子)和公共帖子(在集合“public”下,以便每个人都可以查看彼此的帖子)。现在我想实现一个评论系统。我应该如何构造数据?我应该在每个documentid下创建一个子集合“comments”(针对每个帖子),还是在firebase的用户级别创建一个集合“comments” [![用户级别'] [![收藏“公共”下] [![在集合“public”的子集合中,documentid表示该类

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

[![用户级别']

[![收藏“公共”下]


[![在集合“public”的子集合中,documentid表示该类别下每个帖子的id(论坛、反馈和注释)]

这是一个基于意见的问题,这意味着有不止一个解决方案。但是,我的方法与此类似,您可以修改它,或者从中获得灵感,以获得更好的解决方案:

  • 您必须在每篇博文
    private
    (布尔值)下添加2个附加字段 )
    用户
    (字符串数组)
  • 现在您可以使用类似的工具来查询帖子,例如
    postRef.where('private','==',false);
    ,这将帮助您始终加载非私密的帖子
  • 然后,您可以使用其他方法查询私有帖子,例如
    postRef.where('private','==',true)。where('users','array contains','UID'));
    UID
    是当前登录用户查看论坛页面的UID。当您查询此帖子时,您将能够获取所有私人帖子,但只能获取数组中包含用户UID的帖子
  • 每个帖子都可以有一个JSON obj数组,类似于
    {timestamp:number,comment:string,UID:string}
    。此字段将帮助您跟踪特定帖子的所有评论。但是,能够发布和阅读这些评论的用户将根据上述字段
    users
    private
    进行控制
  • 另一方面,如果论坛预计会有数千条评论,那么建议将评论放在一个单独的数据库中,例如。你可以将它们作为
    posts/[POST\u ID]的引用进行结构化/comments/
    其中
    POST\u ID
    是为Firestore数据库中的每个文档分配的ID。然后在您的POST下,您可以完全删除它,而不是将
    comments
    作为JSON obj数组。因此,当您根据上述查询字段查询文档时,API也会返回给您文档键(POST_ID),您可以使用它从实时数据库中查询注释。有关详细信息,请访问
  • 此外,您可以在数据库中实现规则,以确保完全限制查询私人帖子的用户的访问。这些规则更复杂,可以在中找到更多信息。但是,即使目前没有规则,您也应该可以
  • 话虽如此,请记住这是用例场景的众多方法之一,可能有更多更好的方法来实现相同的方法