首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firestore社交媒体发布表

Firestore社交媒体发布表
EN

Stack Overflow用户
提问于 2019-01-16 20:43:47
回答 2查看 613关注 0票数 2

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

其目标是创建"facebook“新闻提要。

每个用户将有一个朋友列表,每个用户将能够创建帖子。

可以修改每个帖子,使其对应用程序的所有用户或仅对用户朋友可见。因此,每个用户都可以向他所有的朋友发布帖子,也可以向应用程序中的每个人发布帖子。

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

代码语言:javascript
复制
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

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

另外,如果用户更改了他的名字,我如何为他以前的所有帖子和与该用户相关的所有保存帖子相应地更改他的姓名?(位于user likedpost子集合中)

EN

回答 2

Stack Overflow用户

发布于 2019-01-17 04:37:08

我猜你问了两个问题。

首先,Firestore建议使用数据复制,而不是跨集合连接查询。您设计帖子和用户的方式必须依赖于SQL中的查询概念。

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

我真的不推荐这种解决方案,因为作为一个社交平台,用户的朋友可能会不断变化,然后你必须不断更新他的帖子的朋友数组。

还有另一个解决方案,那就是在user下面再添加一个子集合,作为他的可见“feed”。然后,每当作者创建一个帖子时,触发器函数就会将这个帖子的摘要写到他所有朋友的可见“feed”集合中。

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

关于你的第二个问题,如果你认为你的用户会频繁地更改他们的用户名,一种方法是不重复用户名。并且总是通过用户集合中的用户id来查询用户名。另一种方法是在用户更改用户名时,使用触发器函数更新重复的用户名。我推荐第二种方式,因为用户不会频繁更改他们的名字。

票数 0
EN

Stack Overflow用户

发布于 2019-01-17 04:48:19

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

代码语言:javascript
复制
LikedPosts (subcollection)
  postId: Unique identifier for liked post
    authorUserId: String
    authorUsername: String
    text: String
    imagePath: String

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54217353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档