Google cloud firestore 订阅主题的Firestore体系结构
我想为基于Firestore的Android应用程序创建一个架构,您可以在其中“订阅”不同的主题。假设您想订阅3个不同的主题,然后有一个公共列表视图,其中只显示从这三个主题发布的内容。我将如何创建这样一个架构(这里并不是关于编码的问题,只是我将如何使用Firestore构建这样一个东西的架构)Google cloud firestore 订阅主题的Firestore体系结构,google-cloud-firestore,Google Cloud Firestore,我想为基于Firestore的Android应用程序创建一个架构,您可以在其中“订阅”不同的主题。假设您想订阅3个不同的主题,然后有一个公共列表视图,其中只显示从这三个主题发布的内容。我将如何创建这样一个架构(这里并不是关于编码的问题,只是我将如何使用Firestore构建这样一个东西的架构) 非常感谢您提供的任何提示、帮助、链接等。从头开始提供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万怎么办?