Firebase 以高效的方式在Firestore中存储和查询帖子
所以我需要存储由用户创建的帖子,现在数据模型是问题所在,将所有现有帖子放入一个帖子集合中,并带有creatorUserID字段,这样就可以显示属于用户的帖子 现在,一个用户有一个名为Followers的子集合,ID为Followers,问题是我不确定一个查询如何只显示用户关注的人的帖子Firebase 以高效的方式在Firestore中存储和查询帖子,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,所以我需要存储由用户创建的帖子,现在数据模型是问题所在,将所有现有帖子放入一个帖子集合中,并带有creatorUserID字段,这样就可以显示属于用户的帖子 现在,一个用户有一个名为Followers的子集合,ID为Followers,问题是我不确定一个查询如何只显示用户关注的人的帖子 此外,我还担心集合中有10mio+帖子时的性能。为了在Firestore中查询文档,您要查询的数据必须位于您要查询的文档上,无法通过另一个集合中文档的数据查询集合。这就是为什么您的用例有点棘手的原因。这可能看起来
此外,我还担心集合中有10mio+帖子时的性能。为了在Firestore中查询文档,您要查询的数据必须位于您要查询的文档上,无法通过另一个集合中文档的数据查询集合。这就是为什么您的用例有点棘手的原因。这可能看起来不太优雅,但这是一种解决方法: 我们使用两个集合,用户和帖子
User
- email: string
- followingUserIDs: array with docIds of users you are following
Posts
- postName: string
- postText: string
- creatorUserID: string
要查找属于登录用户跟踪的所有用户的所有帖子,我们可以在代码中执行以下操作:
1检索已登录的用户文档
2对于“followeruserids”数组中的每个id,我将查询Firestore中的帖子。在JavaScript中,它类似于:
followingUserIDs.map(followingUserId => {
return firestore.collection('Posts', ref => ref.where('creatorUserID',
'==', followingUserId));
})
3将所有查询的结果合并成一个帖子数组而不是描述数据库结构。请添加一个屏幕截图,并指出您想要获取的记录。@AlexMamo该结构不存在,但问题是,对于这样的目的,最有效的结构是什么?这将非常简单读入存储在users following集合中的uid,然后对其进行迭代,以查询posts节点中包含其用户uid的帖子。此外,这是一个逻辑OR查询,来自文档的逻辑OR查询。在这种情况下,您应该为每个OR条件创建一个单独的查询,并在应用程序中合并查询结果。但是,对于a)ppl之后的数量和b)posts集合中的POST数量较大的情况,这不会很慢吗?这并不是真的,因为Firestore中的查询性能与结果集的大小成比例,而不是与数据集的大小成比例。