我的Ionic 5应用程序具有以下Firestore数据库结构。
Book
集合具有文档,每个文档具有Like
子集合。 “喜欢”收藏的文档名称是喜欢这本书的用户ID。
我正在尝试查询以获取最新的books
,同时尝试从Like
子集合中获取文档,以检查我是否喜欢它。
async getBook(coll) {
snap = await this.afs.collection('Book').ref
.orderBy('createdDate', "desc")
.limit(10).get();
snap.docs.map(x => {
const data = x.data();
coll.push({
key: x.id,
data: data.data(),
like: this.getMyReaction(x.id)
});
}
async getMyReaction(key) {
const res = await this.afs.doc('Book/myUserID').ref.get();
if(res.exists) {
return res.data();
} else {
return 'notFound';
}
}
我在这里正在用每个书ID调用方法getMyReaction()
并将诺言存储在{{1}}字段中。稍后,我将使用HTML中的like
管道读取like
值。这段代码可以正常工作,但是获得async
值会稍有延迟,因为承诺需要时间来解决。是否有一种解决方案可以在我获取集合值的同时获取子集合值?
答案 0 :(得分:2)
有没有一种在我获得收藏价值的同时获得子收藏价值的解决方案?
并非没有重组数据的情况。 Firestore查询只能考虑单个集合中的文档。唯一的例外是集合组查询,它使您可以在名称完全相同的所有集合中考虑文档。您现在为“加入”这两个集合所做的工作可能与获得的效果差不多。
将其转换为单个查询的唯一方法是,使另一个集合与其他两个集合中的数据预先合并在一起。实际上,这在nosql数据库上很常见,称为非规范化。但是,完全由您决定是否适合您的用例。