如何使用 Firestore 实现“Twitter Feed 模式”

Bro*_*oel 5 firebase google-cloud-functions google-cloud-firestore

我在这里处理一个设计模式。我正在创建一个应用程序,您可以在其中拥有关注者和追随者。类似于 Twitter、Instagram、x-social-network。

基本上,当用户打开“主页”视图时,我需要调用一个 Firebase 函数,该函数应该从 Firestore DB 获取关注者的活动源(如 twitter、insta 等)。

我想过做这样的事情:

对于此示例,假设用户A关注用户B

  1. 每次用户B执行应包含在 的提要中的操作时A,我都会在 中添加一个新对象B.feed。就像是:

B.feed['timestampId'] = { eventType: 'new-tweet', photoId: 123123};

  1. 当用户A打开主页视图时,我调用“getFeed”Firebase 函数(这一步不是重要的一步)。
  2. “getFeed”Firebase 函数将获取A关注的用户。
  3. 然后,对于每个A.following用户(在本例中只有B),我将获取该X.feed对象。在本例中:B.feed,我会将其返回给应用程序。

这里有什么问题?如果A关注超过 1 个用户(比方说,BC),常识表明我应该获取.feed用户B和 的C。按照旧的方式,使用 SQL,我会执行类似“SELECT FEED WHERE user_id IN ('B', 'C')”的操作。OR但是,您可能知道, Firestore 中没有调用。

意思是,我不能这样做:

admin.firestore().collection('users')
  .where('id', '=', 'B')
  .where('id', '=', 'C')
  .get()
Run Code Online (Sandbox Code Playgroud)

所以,我实际上应该做的是,n查询的调用次数,其中关注的n用户数量是多少。A

admin.firestore().collection('users')
  .where('id', '=', 'B')
  .get()

admin.firestore().collection('users')
  .where('id', '=', 'C')
  .get()
Run Code Online (Sandbox Code Playgroud)

等待所有这些承诺,然后返回.feed所有这些调用。

感觉就像......我不知道......丑陋(在你可以想象的所有意义上)。

你们对于如何实现这样的事情有更好的想法吗?