如何在单个查询中 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 将不允许您做任何无法扩展的事情。所有索引操作都可以大规模扩展。