firebase 如何为Instagram克隆构建Cloud Firestore数据?

6rqinv9w  于 2023-02-25  发布在  其他
关注(0)|答案(1)|浏览(121)

我在做一个简单的Instagram克隆其中有一个页面供用户张贴图片,另一个页面供查看其他用户张贴的图片。在Cloud Firestore中,我有一个collection of Users,但我不确定应该如何存储图片。我应该有一个与collection of users处于同一级别的collection of posts,还是每个User document都应该指向一个sub-collection of posts?我觉得让每个User Document指向一个Sub-Collection of Posts在组织Database方面更有意义,但同时,我认为如果不指定从哪个用户那里获取子集合,从Database获取“Posts”会更困难。

9jyewag0

9jyewag01#

在云Firestore我有一个用户的集合,我不知道我应该如何存储图片.
我们通常会根据要执行的查询来构建Firestore数据库。因此,如果您清楚地了解查询应该是什么,那么构建数据库架构可能会非常容易。还请记住,存在no "perfect", "the best" or "the correct" solution for structuring a Cloud Firestore database。您可以根据应用的用例来构建结构。
我是否应该拥有与用户集合处于同一级别的帖子集合,或者每个用户文档都应该指向帖子的子集合?
Firestore中的查询是浅层次的,这意味着它只会从查询所针对的集合中获取文档。因此,无论文档中有顶级集合还是嵌套的子集合,查询都将返回来自单个集合的文档。
我觉得让每个用户文档指向一个帖子子集在数据库的组织方面更有意义。
是的,没错,如果您在每个User文档下添加一个名为“posts”的子集合,您的模式看起来会更有条理。
但与此同时,我认为如果不指定从哪个用户那里获取子集合,从数据库中获取帖子会更加困难。
它不会的!如果你把它添加为一个顶级集合,或者作为一个子集合,你将能够非常容易地查询这两个集合。
假设您有一个如下所示的模式:

Firestore-root
  |
  --- users (collection)
  |    |
  |    --- $uid (document)
  |         |
  |         --- //fields
  |
  --- posts (collection)
       |
       --- $postId (document)
            |
            --- uid: "$uid"

要获取所有现有帖子,您需要使用以下CollectionReference对象:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference postsRef = rootRef.collection("posts");

要获取与特定用户对应的所有帖子,您需要使用以下查询:

Query query = postsRef.whereEqual("uid", uid);

但是,如果您的数据库架构如下所示:

Firestore-root
  |
  --- users (collection)
       |
       --- $uid (document)
       |    |
       |    --- posts (collection)
       |          |
       |         --- $postId (document)
       |
       --- $uid (document)
            |
            --- posts (collection)
                 |
                 --- $postId (document)

要获取所有现有帖子,需要使用如下所示的集合组查询:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference postsRef = rootRef.collectionGroup("posts");

要获取与特定用户对应的所有帖子,您需要使用以下CollectionReference:

CollectionReference postsRef = rootRef.collection("users").document(uid).collection("posts");

因此,从这个Angular 来看,哪种解决方案更好,这取决于您。

相关问题