Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Google cloud firestore 订阅主题的Firestore体系结构_Google Cloud Firestore - Fatal编程技术网

Google cloud firestore 订阅主题的Firestore体系结构

Google cloud firestore 订阅主题的Firestore体系结构,google-cloud-firestore,Google Cloud Firestore,我想为基于Firestore的Android应用程序创建一个架构,您可以在其中“订阅”不同的主题。假设您想订阅3个不同的主题,然后有一个公共列表视图,其中只显示从这三个主题发布的内容。我将如何创建这样一个架构(这里并不是关于编码的问题,只是我将如何使用Firestore构建这样一个东西的架构) 非常感谢您提供的任何提示、帮助、链接等。从头开始提供Firestore结构是一件复杂的事情,因为我相信您所描述的并不是您应用程序的所有要求。话虽如此,我将根据您提出的问题分享我将如何做到这一点: 基本上,

我想为基于Firestore的Android应用程序创建一个架构,您可以在其中“订阅”不同的主题。假设您想订阅3个不同的主题,然后有一个公共列表视图,其中只显示从这三个主题发布的内容。我将如何创建这样一个架构(这里并不是关于编码的问题,只是我将如何使用Firestore构建这样一个东西的架构)


非常感谢您提供的任何提示、帮助、链接等。

从头开始提供Firestore结构是一件复杂的事情,因为我相信您所描述的并不是您应用程序的所有要求。话虽如此,我将根据您提出的问题分享我将如何做到这一点:

基本上,我会创建两个集合:

Topics Collection
    uid
    field1
    ...
    fieldN
    userIds[]

Publications Collection
    uid
    field1
    ...
    fieldN
    topicIds[]
它的工作原理是,每当用户订阅一个主题时,你将他的
uid
添加到
userid
数组中,一旦你想检查当前用户订阅了哪些主题,你就可以查询他的id是否在所述数组中

根据publications,同样的逻辑也适用,如果您希望用户从他订阅的主题中获取出版物,您只需使用上面提到的查询结果,并对其每个结果执行以下查询:

var user = firebase.auth().currentUser
var listPubs = [];
db.collection("topics")
  .where("userIds", "array-contains", user.uid)
  .get()
  .then((querySnapshot) =>{
      querySnapshot.forEach((doc) => {
          db.collection("publications")
            .where("topicIds", "array-contains", doc.id)
            .get()
            .then((secondSnapshot) =>{
                listPubs.concat(secondSnapshot.docs);
            })
      });
  })

<强>注:这根本没有优化,但应该是一个很好的起点来考虑你的结构。此外,我还没有添加用户集合,因为您可以使用Firebase auth的数据,但如果需要,您可以创建一个。

@RobinSvensson会这样做吗?会的,谢谢。我只是问一个问题。如果我没弄错的话,因为限制的文档大小是1MB;如果主题ID高于此值,是否有解决方法?假设每个主题有大约20000个UID,限制为1MB。如果超过3万怎么办?