如何在单个查询中 select 多个文档引用?
How to select multiple document references in a single query?
我有两个 Firestore 集合,一个叫 parents
,一个叫 children
。这些集合是 "related",因为 parents
有一组 child
文档引用附加到它们。
我想要完成的是: 以高效的方式将所有 "related" 的 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
.
如有任何帮助或建议,我们将不胜感激。谢谢!
不,不可能在单个查询中跨 differently-named 个集合进行查询。没有"join"类型的操作。
你现在做的不是真的"bombarding" Firestore。它旨在跟上许多文档读取,并且所有查询都通过单个连接进行流水线处理。这里的性能或可伸缩性并不是真正的问题,除非您请求的数据超出您的需要。事实上,Cloud Firestore 将不允许您做任何无法扩展的事情。所有索引操作都可以大规模扩展。
我有两个 Firestore 集合,一个叫 parents
,一个叫 children
。这些集合是 "related",因为 parents
有一组 child
文档引用附加到它们。
我想要完成的是: 以高效的方式将所有 "related" 的 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
.
如有任何帮助或建议,我们将不胜感激。谢谢!
不,不可能在单个查询中跨 differently-named 个集合进行查询。没有"join"类型的操作。
你现在做的不是真的"bombarding" Firestore。它旨在跟上许多文档读取,并且所有查询都通过单个连接进行流水线处理。这里的性能或可伸缩性并不是真正的问题,除非您请求的数据超出您的需要。事实上,Cloud Firestore 将不允许您做任何无法扩展的事情。所有索引操作都可以大规模扩展。