我想知道下面的场景到底有什么区别。我们有
Posts
,它是由用户创建的,因此除了字段userId
之外还包含一个字段postContent
。
我现在可以想到两种可能的解决方案:
Posts
,其中每个帖子都是一个
文档和一个单独的Users
顶级集合,每个用户
由文档表示。Users
顶级集合和一个子集合UserPosts
在每个用户文档下。两个可能的查询:
给我用户xyd的所有帖子。可以通过解决方案 1 通过询问集合中的所有文档来完成
Posts
where userId == 'xyd'
。也可以通过解决方案 2 来完成,方法是询问“获取 ID 为‘xyd’的用户文档子集合下的所有文档”
给我所有包含“猫”这个词的帖子。两种解决方案都不应该这样做吗?解决方案 1 是基本查询,解决方案 2 只需对
postContent
>= 'Cats'? 的字段进行 groupcollection 查询
我忘记了什么吗?或者这两种解决方案都有效吗?如果两者都有效,那么我刚才描述的哪种情况是正确的?
构建 Cloud Firestore 数据库没有“完美”、“最佳”或“正确”的解决方案。在 NoSQL 世界中,我们通常根据要执行的查询来构建数据库。因此,如果您找到的解决方案之一有效,那么您应该继续使用它。
是的,这是正确的。可以查询这两种模式以返回单个用户的帖子。
是的,对于第一个方案,你只需要简单的查询,而当使用第二个方案时,需要一个collectionGroup查询。
不,您可以选择是否使用一种解决方案而不是另一种解决方案。