Firestore:每个用户有一个子集合还是只有一个顶级集合?

问题描述 投票:0回答:1

我想知道下面的场景到底有什么区别。我们有

Posts
,它是由用户创建的,因此除了字段
userId
之外还包含一个字段
postContent
。 我现在可以想到两种可能的解决方案:

  1. 有一个简单的顶级收藏
    Posts
    ,其中每个帖子都是一个 文档和一个单独的
    Users
    顶级集合,每个用户 由文档表示。

  1. 有一个
    Users
    顶级集合和一个子集合
    UserPosts
    在每个用户文档下。

两个可能的查询:

  1. 给我用户xyd的所有帖子。可以通过解决方案 1 通过询问集合中的所有文档来完成

    Posts
    where
    userId == 'xyd'
    。也可以通过解决方案 2 来完成,方法是询问“获取 ID 为‘xyd’的用户文档子集合下的所有文档”

  2. 给我所有包含“猫”这个词的帖子。两种解决方案都不应该这样做吗?解决方案 1 是基本查询,解决方案 2 只需对

    postContent
    >= 'Cats'?

    的字段进行 groupcollection 查询

我忘记了什么吗?或者这两种解决方案都有效吗?如果两者都有效,那么我刚才描述的哪种情况是正确的?

firebase google-cloud-platform google-cloud-firestore nosql
1个回答
0
投票

构建 Cloud Firestore 数据库没有“完美”、“最佳”或“正确”的解决方案。在 NoSQL 世界中,我们通常根据要执行的查询来构建数据库。因此,如果您找到的解决方案之一有效,那么您应该继续使用它。

  1. 是的,这是正确的。可以查询这两种模式以返回单个用户的帖子。

  2. 是的,对于第一个方案,你只需要简单的查询,而当使用第二个方案时,需要一个collectionGroup查询。

不,您可以选择是否使用一种解决方案而不是另一种解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.