Android 如何为Instagram克隆构建云Firestore数据?

Android 如何为Instagram克隆构建云Firestore数据?,android,database,firebase,google-cloud-firestore,Android,Database,Firebase,Google Cloud Firestore,我正在制作一个简单的Instagram克隆,其中有一个页面供用户发布图片,另一个页面可查看其他用户发布的图片。在云Firestore中,我有一个用户集合,我不确定应该如何存储图片。我是否应该拥有一个与用户集合相同级别的帖子集合,或者每个用户文档是否指向一个帖子子集合? 我觉得让每个用户文档指向帖子的子集合在数据库的组织方面更有意义,但同时,我认为如果不指定从哪个用户获取子集合,从数据库获取“帖子”会更加困难 在云Firestore中,我有一个用户集合,我不确定应该如何存储图片 我们通常根据要执行

我正在制作一个简单的Instagram克隆,其中有一个页面供用户发布图片,另一个页面可查看其他用户发布的图片。在
云Firestore
中,我有一个
用户集合
,我不确定应该如何存储图片。我是否应该拥有一个与
用户集合
相同级别的
帖子集合
,或者每个
用户文档
是否指向一个
帖子子集合
? 我觉得让每个
用户文档
指向帖子的
子集合
数据库
的组织方面更有意义,但同时,我认为如果不指定从哪个用户获取子集合,从
数据库
获取“帖子”会更加困难

在云Firestore中,我有一个用户集合,我不确定应该如何存储图片

我们通常根据要执行的查询构造Firestore数据库。因此,如果您清楚地知道查询应该是什么,那么构建数据库模式可能非常容易。还请记住,有。您可以根据应用程序的用例构建结构

我应该拥有与用户集合相同级别的帖子集合,还是每个用户文档都指向帖子的子集合

Firestore中的查询很浅,这意味着它只能从运行查询所针对的集合中获取文档。因此,如果文档中有顶级集合或嵌套的子集合,则查询始终只返回单个集合中的文档

我觉得让每个用户文档指向帖子的子集合在数据库的组织方面更有意义

是的,没错,如果您在每个用户文档下添加一个名为“posts”的子集合,您的模式将看起来更有条理

但同时,我认为如果不指定从哪个用户获取子集合,则从数据库获取帖子将更加困难

没有!如果您将其添加为顶级集合或子集合,则可以非常轻松地查询这两个集合

假设您有一个如下所示的模式:

Firestore-root
  |
  --- users (collection)
  |    |
  |    --- $uid (document)
  |         |
  |         --- //fields
  |
  --- posts (collection)
       |
       --- $postId (document)
            |
            --- 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对象:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference postsRef = rootRef.collection("posts");
要获取与特定用户对应的所有帖子,您需要使用以下查询:

Query query = postsRef.whereEqual("uid", uid);
但是,如果数据库架构如下所示:

Firestore-root
  |
  --- users (collection)
  |    |
  |    --- $uid (document)
  |         |
  |         --- //fields
  |
  --- posts (collection)
       |
       --- $postId (document)
            |
            --- 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");
要获取所有现有帖子,您需要使用如下所示的:

Firestore-root
  |
  --- users (collection)
  |    |
  |    --- $uid (document)
  |         |
  |         --- //fields
  |
  --- posts (collection)
       |
       --- $postId (document)
            |
            --- 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");

因此,从这个角度来看,由您来决定哪种解决方案更好。

谢谢您的详细回答,我认为对我来说最好的选择是最后一种。非常欢迎您,马里奥。很高兴听到这个消息;)