我有两个Firestore集合,一个叫做parents
,另一个叫做children
。这些集合是“相关的”,因为parents
具有附加的child
个文档引用数组。
我要完成的任务是::以一种高效的方式,将所有与children
“相关”的parent
与之关联。
我尝试过的事情:我想出了这段功能强大的代码:
this.subscription = this.props.firebase.parent().onSnapshot((parent) => { // get a single parent
let childrenPromises = (parent.data().children || []).map(child => this.props.firebase.child(child.id).get()); // build array of promises
Promise.all(childPromises) // resolve all promises
.then(children => {
// children.data() has the data I need :)
});
});
总结:我检索child
文档参考的列表,然后使用promises分别检索所有参考。效果很好,但是用查询请求轰炸了我的数据库。
我要改进的地方:能否以某种方式将其重构为一个性能更高的查询?理想情况下,这将是单个查询,以防止对数据库发出如此多的请求。
我尝试过的事情:我已阅读完所有的Firestore文档和Stack Overflow帖子,但运气不佳。我确实读过,对数据库进行非规范化是一个选项,但是我不希望这样做,因为可以将多个parents
绑定到children
。
任何帮助或建议,在这里都表示赞赏。谢谢!
答案 0 :(得分:1)
否,不可能在单个查询中跨名称不同的集合进行查询。没有“ join”类型的操作。
您现在正在做什么并没有真正“轰炸” Firestore。它是为跟上许多文档读取而构建的,所有查询都通过单个连接进行流水线处理。此处的性能或可伸缩性实际上不是问题,除非您请求的数据量超过所需。实际上,Cloud Firestore根本不允许您执行任何无法扩展的事情。所有索引操作都大规模扩展。