javascript - 访问集合组查询中每个 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 次约会的公司数据)?有没有更好的方法可以访问该父数据,这样我就不会进行所有这些额外的调用?如果我能以一种可扩展的方式做到这一点,那就太好了。
解决方案
无法同时获取父文档和appointments
集合中的文档。
您唯一能做的就是将文档 ID 分成 10 个批次,然后对它们进行IN
查询。但我怀疑这是否值得付出努力,因为有线流量可能几乎相同。
请注意,性能通常不会与调用次数呈线性相关,因此请在尝试优化之前进行测试。另请参阅Google Firestore - 如何在一次往返中通过多个 id 获取文档?.
另外:请考虑一下为什么一次需要 500 个文档。您通常需要加载一屏数据,这似乎更多。对于 Firestore 中的数据建模的一般提示,我推荐第一集开始了解 Cloud Firestore。
推荐阅读
- php - 在 Quickbook 中向客户添加日记帐分录时出现问题 - 消息:在构建 ReferenceType 时,传递的数组没有“值”的键
- vb.net - While 循环变量中的不一致
- gwt - GWT-Jackson-APT 在用于编码字符串的 $wnd.window JSON web-worker 代码上失败
- java - 如何将 Liferay 7.1 作为 Windows 服务运行?
- encoding - 霍夫曼编码如何找出代码唯一的属性
- postgresql - 将 Json 文本更改为 json 数组
- php - HTML / PHP / SQL 在某些情况下如何显示按钮?
- linux - 如何在 linux 4.19.20 中实现一个返回 2*(整数传递)的新系统调用?
- django - 如何让 linkify 将您带到 django 表中的详细视图?
- javascript - 在mysql sequelize中使用相同的字段和不同的值查找所有数据