【问题标题】:How to select multiple document references in a single query?如何在单个查询中选择多个文档引用?
【发布时间】:2019-06-14 13:57:58
【问题描述】:

我有两个 Firestore 集合,一个名为 parents,一个名为 children。这些集合是“相关的”,因为 parents 有一个 child 附加到它们的文档引用数组。

我想要完成的是:以高效的方式获取与单个parent“相关”的所有children

我尝试了什么:我想出了这个功能强大的代码:

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

感谢您在此处提供任何帮助或建议。谢谢!

【问题讨论】:

    标签: javascript performance google-cloud-firestore non-relational-database


    【解决方案1】:

    不,不可能在单个查询中查询不同名称的集合。没有“加入”类型的操作。

    您现在所做的并不是真正“轰炸” Firestore。它旨在跟上许多文档读取,并且所有查询都通过单个连接进行管道传输。除非您请求的数据超出您的需要,否则这里的性能或可伸缩性并没有真正的问题。事实上,Cloud Firestore 根本不允许您做任何无法扩展的事情。所有索引操作都大规模扩展。

    【讨论】:

    • 来自 firebase 团队本身,我想这回答了我的问题。非常感谢您确认这看起来不错。作为来自关系数据库世界的人,我认为它闻起来很香,但我猜不是!
    • 如果它可以扩展,那就太好了。是否有一个地方描述了使用统计中的“阅读”构成?当试图保持低成本时,它很重要。
    猜你喜欢
    • 1970-01-01
    • 2011-07-01
    • 2013-02-07
    • 2011-11-20
    • 2021-10-15
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 2021-01-05
    相关资源
    最近更新 更多