【发布时间】:2019-10-26 07:56:08
【问题描述】:
我正在考虑将 Firestore 用于社交媒体供稿的几个想法。到目前为止,我的想法还没有付诸实施,所以我希望得到社区的反馈。
这个想法是允许用户发布信息或记录他们的活动,并向任何关注/订阅该信息的用户显示它。帖子信息将位于名为 posts 的根集合中。
据我所知,这些方法需要大致相同数量的读取和写入。
一个想法是在users/{userId} 中有一个名为posts 的字段,它是我有兴趣为用户提取的documentId 数组。这将允许我直接从posts 中提取数据并获取最新版本的数据。
另一种方法似乎更像 Firebasey,即将文档存储在 users/{userId}/feeds 中,它们是帖子本身的副本。我可以使用与posts 中的数据相同的postID。据推测,如果我需要更新任何评论的数据,我可以使用组集合查询来获取所有称为提要的集合,其中 docID 是相等的(或者只是创建一个字段来做一个正确的"where", "==", docId)。
第三种方法是更新应该查看帖子的人员列表。只要帖子列表比关注者列表短,这似乎更好。不是维护每个关注者的所有帖子,而是维护每个帖子的所有关注者。对于每个新关注者,您需要更新所有帖子。
此列表不会是用户自己的帖子。相反,它将是显示该用户的所有帖子的列表。
三个挑战者:
-
users/{userId} 字段名为
feed- 指向全局帖子的文档 ID 数组。获取该提要,按 ID 获取所有文档。每次用户有活动时,都需要为每个关注者更新每个数组。users (coll) -> uid (doc) -> uid.feed: postId1, postId2, postId3, ...] (field) posts (coll) -> postId (doc)
查询(伪):
doc(users/{uid}).get(doc)
feed = doc.feed
for postId in feed:
doc(posts/{postId}).get(doc)
-
users/{userId}/feed 包含您希望此用户看到的所有
posts的副本。每个活动/帖子都需要添加到每个相关的提要列表中。users (coll) -> uid (doc) -> feed: (coll) -> postId1 (doc) -> postId2 -> postId3 posts (coll) -> postId (doc)
查询(伪):
collection(users/{uid}/feed).get(docs)
for post in docs:
doc(posts/{post}).get(doc)
-
users/{userId}/feed 包含您希望此用户看到的所有
posts的副本。每个活动/帖子都需要添加到每个相关的提要列表中。users (coll) -> uid (doc) posts (coll) -> postId (doc) -> postId.followers_array[followerId, followerId2, ...] (field)
查询(伪):
collection(posts).where(followers, 'array_contains', uid).get(docs)
读/写
1.更新数据
对于每个活动的作者user,找到所有关注该活动的用户
用户。目前,用户被存储为集合中的文档,所以这是 followerNumber 文档读取。对于每个用户,通过添加 postId 来更新他们的数组,这将是 followerNumber 文档写入。
1.显示数据/Feed
对于提要的每次获取:从用户文档中获取数组(读取 1 个文档)。对于每个 postId,请致电 posts/{postId}
这将是 numberOfPostsCalled 文档读取。
2。更新数据
对于每个活动的作者user,找到所有关注该活动的用户
用户。目前,用户被存储为集合中的文档,所以这是 followerNumber 文档读取。对于每个用户,将 ID 为 postId 的新文档添加到 users/{userId}/feed,这将是 followerNumber 文档写入。
2。显示数据/Feed
对于提要的每次获取:从users/{userId}/feed获取一定数量的帖子
这将是 numberOfPostsCalled 文档读取。
第二种方法要求我在编辑时使所有文档保持最新。因此,尽管这种方法看起来更像 firebase,但持有 postId 并直接获取它的方法似乎更合乎逻辑。
3。更新数据 对于每个新关注者,被关注者撰写的每个帖子都需要更新。新的追随者被附加到一个名为追随者的数组中。
3。显示数据
对于提要的每次提取:从posts 获取一定数量的帖子,其中uid == viewerUid
【问题讨论】:
-
我真的很想讨论这个问题,但我是一个有眼光的人,你介意对你的模式和你没有完成的查询做样本吗?
-
您心目中的最佳视觉效果是什么?您只是指架构的表格布局吗?很高兴!
-
是的,这已经足够了,你也尝试过的查询:)
-
嘿@andresmijares 我刚刚添加了视觉和第三种方法。我实际上喜欢第三种方法,但我可以看到维护所有帖子会变得很麻烦。获取所有帖子是一个不太复杂的查询,但不确定它是否有回报。
-
我只添加了显示部分,我认为它比查看上传数据的架构更容易阅读。我放了 3. 为 3 种方法更新数据。
标签: firebase google-cloud-firestore