当前位置: 首页 > 知识库问答 >
问题:

Firestore社交媒体帖子表

芮雪风
2023-03-14

因此,我想创建一种社交媒体应用程序,并使用fiRest作为主数据库

目标是创建“facebook”新闻源。

每个用户都有一个朋友列表,每个用户都可以创建帖子。

每个帖子都可以被修改为对应用程序的所有用户或用户朋友可见。所以每个用户都可以向他所有的朋友发布帖子,并向应用程序中的每个人发布帖子。

此外,用户还可以在新闻提要中“保存”他们喜欢的帖子。(类似帖子子集合)

USERS (collection)
    DocumentID - userId gathered from Authentication uid
        firstName: String
        lastName:  String
        username:  String
        birthdate: Timestamp
        accountCreationDate: Timestamp
        FRIENDS (subcollection)
            DocumentID - userId of the friend
                username:  String
        LikedPosts (subcollection)
            authorUserId:   String
            authorUsername: String
            text:  String   
            imagePath: String

POSTS (collection)
    DocumentID - postId randomly generated
        authorUserId:   String
        authorUsername: String
        text:  String   
        imagePath: String
        likesCount: Number
        forFriendsOnly:yes
        LIKES (subcollection)
            DocumentID - userID of the liker
                username:  String

现在在用户的新闻提要中-我如何查询所有可见的帖子(仅限好友:否),以及仅限好友的所有帖子,即当前用户位于作者好友子集合中。

另外,如果用户更改了他的名字,我如何为他的所有历史发文以及与用户相关的所有保存帖子相应地更改他的名字?(位于用户likedpost子集合中)

共有2个答案

孙福
2023-03-14

不一定与原始问题相关,但您的LikedPosts子集合可能需要重新构造。如果你能确保你的posted的唯一性,那么它可能应该是这样的:

LikedPosts (subcollection)
  postId: Unique identifier for liked post
    authorUserId: String
    authorUsername: String
    text: String
    imagePath: String

当前的结构只允许一个喜欢的帖子,所以您需要将其更改为每个喜欢的帖子一个文档,或者一个包含所有喜欢的帖子ID列表的文档。

汝志
2023-03-14

我猜你问了两个问题。

首先,FiRest推荐数据重复,而不是跨集合连接查询。您设计帖子和用户的方式必须依赖SQL中的查询概念。

如果您不介意将作者的所有好友id作为一个数组放在帖子文档中,那么仍然可以实现这一点。同时,当作者添加/删除朋友时,您必须通过触发器功能同步作者的朋友数组。

我真的不推荐这个解决方案,因为作为一个社交平台,用户的朋友可能会不断变化,那么你必须不断更新他所有帖子的朋友阵列。

还有一种解决方案,就是在用户下面多增加一个子集合作为他的可见“馈源”,那么每当作者创建了一个帖子,触发函数就会把这个帖子的摘要写到他所有好友的可见“馈源”集合中。

然而,如果你关心准确性、实时性、成本等,上述两种解决方案都不完美。我想这是我们必须忍受的缺点。如果你必须实现和SQL一样的东西,我想唯一的选择是使用其他解决方案的查询部分,如弹性搜索,mysql,neo4j等。

关于你的第二个问题,如果你认为你的用户经常更改他们的名字,一种方法是不要重复用户名。并始终从用户集合中按用户id查询用户名。另一种方法是在用户更改用户名时使用触发器函数更新重复的用户名。我推荐第二种方式,因为用户不会经常更改自己的名字。

 类似资料:
  • 这可能是一个相当开放的问题,但我需要发布到各种社交媒体网站,如facebook,twitter,领英,谷歌等。现在请记住,这是一个真正的帖子,而不仅仅是一个共享-换句话说,我已经通过OAuth存储了用户凭据,并将在他们的墙上制作一个格式化的帖子,提要等。 问:有没有什么方法可以让我在各种社交媒体上准确或非常接近地预览这篇文章?例如,在用户发布帖子之前,我可以向他们展示他们在facebook或谷歌上

  • 我有一个集合,我的应用程序在其中存储用户的所有帖子,数据结构如下: 现在,我想向我的用户显示这个集合的所有帖子;但是,只有当用户跟随创建帖子的人时,即帖子文档的字段适合。 我知道如果用户只关注一个人,查询集合是很简单的,也就是说,我有一个简单的子句。但是:如果我的用户关注10,000人或更多人呢?我怎么查询呢? 另外,我应该如何存储,即用户跟随的人?使用简单的数组似乎不适合我,但是使用所有其他选项

  • 当用户导航到Likes或Comments屏幕时,他/她将分别看到用户指定帖子的Likes或Comments列表。 用这种结构能正确处理这两种情况吗?或者将评论和喜欢集合放在/posts/{userId}/userposts/{postId}/(也可以作为子集合)中会更好 Firestore可以同时执行“多个集合查询”吗?以便在我的“交互”屏幕中,我可以从按日期排序的不同集合中获取所需的数据 我很感

  • 我正在尝试为一个简单的社交媒体概念创建一个简单的云Firestore数据库结构。 每个用户最多可以有一个可以随时更新的帖子(一个“最喜欢的”帖子除外)。用户“最喜欢的”版本的帖子被保存为一个单独的帖子,当用户在其当前版本的帖子上收到比最喜欢的版本更多的赞时,该帖子可以被更新。 friends子集合存储好友用户名,因此很容易按用户名创建该用户的好友列表。我假设我可以通过将朋友的documentID与

  • 我们正在使用Firebase构建一个社交媒体网络应用程序,并使用firest来存储用户和他们的帖子。 当用户喜欢某个帖子时,我们会将其保存在中,并在帖子文档中更新。 假设我们的应用每天有100万用户,他们都非常喜欢病毒性帖子。 现在,firebase表示一个文档每秒不能处理超过一次写入。然而,我们已经看到,我们可以每秒更新文档几次,但他们仍然不建议这样做。 我的问题是,在firestore中存储所

  • 我有一个数据结构,由一个名为“民意测验”的集合组成“民意测验”有几个随机生成身份证的文档。在这些文档中,还有一个名为“答案”的额外集合用户对这些民意测验进行投票,投票都写入“答案”子集合。我在“答案”节点上使用. runTransaction()方法,目的是这个子集合(对于任何给定的投票)不断被用户更新和写入。 我一直在阅读关于火力恢复的社交媒体结构。然而,我最近遇到了火力恢复的一个新功能,“ar