【问题标题】:Store and Query Posts in Firestore in a performant way以高效的方式在 Firestore 中存储和查询帖子
【发布时间】:2019-03-23 09:34:40
【问题描述】:

所以我需要存储用户创建的帖子,现在数据模型是问题所在,将所有现有帖子放入带有 creatorUserID 字段的帖子集合中将使其能够显示属于用户的帖子。

现在用户有一个名为 Followers 的子集合,其中包含关注的人的 ID,问题在于我不确定查询如何仅显示用户关注的人的帖子。

当集合中有 10mio+ 帖子时,我也担心性能。

【问题讨论】:

  • 不要描述数据库结构,而是添加它的屏幕截图并指出您要获取的记录。
  • @AlexMamo 结构不存在,但问题是对于这样的目的最有效的结构是什么
  • 在用户集合中读取存储在用户中的 uid,然后遍历它们以查询帖子节点以查找包含其用户 uid 的帖子,这将是相当简单的。这也是一个逻辑 OR 查询,来自文档 Logical OR 查询。在这种情况下,您应该为每个 OR 条件创建一个单独的查询,并在您的应用中合并查询结果。

标签: firebase google-cloud-firestore


【解决方案1】:

为了在 Firestore 中查询文档,您要查询的数据需要在您要查询的 Document 上,无法通过另一个集合中的文档数据查询集合。这就是您的用例有点棘手的原因。它可能看起来不是很优雅,但这是解决它的一种方法:

我们使用两个集合,用户和帖子。

User
    - email: string
    - followingUserIDs: array with docIds of users you are following

Posts
    - postName: string
    - postText: string
    - creatorUserID: string

要查找登录用户关注的所有用户的所有帖子,我们可以在代码中执行以下操作:

1 检索登录的用户文档

2 对于“followingUserIDs”数组中的每个 id,我会在 Firestore 中查询帖子。在 JavaScript 中会是这样的:

followingUserIDs.map(followingUserId => {
        return firestore.collection('Posts', ref => ref.where('creatorUserID', 
        '==', followingUserId));
    })

3 将所有查询的结果合并到一个帖子数组中

【讨论】:

  • 但是对于更大数量的 a) 关注 ppl 和 b) 帖子集合中的帖子数量,这会不会很慢?
  • 并非如此,因为在 Firestore 中,查询性能与结果集的大小成正比,而不是与数据集的大小成正比。
猜你喜欢
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 2018-07-18
  • 2018-06-25
  • 1970-01-01
相关资源
最近更新 更多