Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 以高效的方式在Firestore中存储和查询帖子_Firebase_Google Cloud Firestore - Fatal编程技术网

Firebase 以高效的方式在Firestore中存储和查询帖子

Firebase 以高效的方式在Firestore中存储和查询帖子,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,所以我需要存储由用户创建的帖子,现在数据模型是问题所在,将所有现有帖子放入一个帖子集合中,并带有creatorUserID字段,这样就可以显示属于用户的帖子 现在,一个用户有一个名为Followers的子集合,ID为Followers,问题是我不确定一个查询如何只显示用户关注的人的帖子 此外,我还担心集合中有10mio+帖子时的性能。为了在Firestore中查询文档,您要查询的数据必须位于您要查询的文档上,无法通过另一个集合中文档的数据查询集合。这就是为什么您的用例有点棘手的原因。这可能看起来

所以我需要存储由用户创建的帖子,现在数据模型是问题所在,将所有现有帖子放入一个帖子集合中,并带有creatorUserID字段,这样就可以显示属于用户的帖子

现在,一个用户有一个名为Followers的子集合,ID为Followers,问题是我不确定一个查询如何只显示用户关注的人的帖子


此外,我还担心集合中有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中的查询性能与结果集的大小成比例,而不是与数据集的大小成比例。