【问题标题】:Compound queries in Firebase Sub Collections in Cloud Functions?Cloud Functions 中 Firebase 子集合中的复合查询?
【发布时间】:2023-03-31 22:01:02
【问题描述】:

搜索集合中所有文档的复合查询完美运行,如下所示:

var newData = admin.firestore().collection("MyProject").where('username', '==', 'myname');

为了存储更多用户生成的数据,我使用“collection/doc/collection/doc”功能,其中文档是根据用户的输入自动生成的。

现在要查询在最后一个文档中创建任何内容的数据,我想要这样的东西:

var newData = admin.firestore().collection("MyProject/{docID}/subcollection")
.where('location', '==', 'location');

但这不起作用。还有什么我可以尝试的只能让我得到匹配内容的结果吗?

(以下也没有)

var newData = admin.firestore().collection("MyProject".doc({docID}").collection("subcollection")
    .where('location', '==', 'location');

也许通配符仅适用于触发器而不适用于查询? (https://firebase.google.com/docs/functions/firestore-events)。我不确定,因为我无法在网上找到更多关于此的文档。如果没有这个功能,我会发现 collection/doc/collection/doc... 存储风格非常有限且无用。

我想到的一种解决方法是获取 MyCollection 中的“所有”文档并运行这些文档的查询“forEach”。这将在 Firestore 中具有更高的复杂性和更多的读取,因为 MyProject 中可能有数千个文档。

请分享您关于如何以最低复杂度获取数据的智慧。提前谢谢!

【问题讨论】:

    标签: firebase google-cloud-functions


    【解决方案1】:

    Firestore 查询不支持通配符。您必须知道要查询的最终集合的路径中的集合和文档的 ID。您在 Cloud Functions 触发器中看到的通配符完全不同,因为它们实际上根本不执行任何查询。

    如果将文档组织成子集合会使您更难以查询数据,请不要使用它。您应该始终以最能满足您需要执行的查询的方式对数据进行建模。有时更扁平的模型允许更灵活的查询,这很好。 Firestore 可以轻松扩展子集合中的数十亿个文档。

    您可能还想查看collection group queries,如果这样可以更轻松地查询具有相同名称的所有子集合,无论它们在哪里组织。这可能对你有用:

    admin.firestore()
        .collectionGroup("subcollection")
        .where('location', '==', 'location');
    

    【讨论】:

    • 这里我没有回复,但是我们确实实现了集合组查询的解决方案。谢谢道格!
    猜你喜欢
    • 2019-04-16
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2019-12-20
    • 2018-03-29
    • 2019-03-27
    相关资源
    最近更新 更多