首页 > 解决方案 > 访问集合组查询中每个 DocumentReference 的父数据

问题描述

我有companies每个公司文件的集合和内部,我有一个集合appointments。我想遍历云函数appointments中的所有companies内容,因此我使用以下集合组查询:

db.collectionGroup('appointments')
    .get()
    .then((querySnapshot: any) => {
        querySnapshot.forEach((appointmentDoc: any) => {
            const appointment: Appointment = appointmentDoc.data();
            appointmentDoc.ref.parent.parent.get().then((companyDoc: any) => {
                const company: Company = companyDoc.data();
                ...
            });
        });
     });

如您所见,在每次迭代中,我还会获取任命所在公司的数据。这行得通,但我担心性能。如果我有 500 次约会,那么这种方法不是基本上对数据库进行 501 次调用(1 次用于约会,然后获取所有 500 次约会的公司数据)?有没有更好的方法可以访问该父数据,这样我就不会进行所有这些额外的调用?如果我能以一种可扩展的方式做到这一点,那就太好了。

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


无法同时获取父文档和appointments集合中的文档。

您唯一能做的就是将文档 ID 分成 10 个批次,然后对它们进行IN查询。但我怀疑这是否值得付出努力,因为有线流量可能几乎相同。

请注意,性能通常不会与调用次数呈线性相关,因此请在尝试优化之前进行测试。另请参阅Google Firestore - 如何在一次往返中通过多个 id 获取文档?.

另外:请考虑一下为什么一次需要 500 个文档。您通常需要加载一屏数据,这似乎更多。对于 Firestore 中的数据建模的一般提示,我推荐第一集开始了解 Cloud Firestore


推荐阅读