如何在 CloudFirestore 上移动子集合

rob*_*nnn 5 firebase google-cloud-firestore

我们计划使用 Google Firestore 实施虚拟文件系统。

子集合的想法很好,因为它允许我们根据文件夹层次结构对数据进行建模,如下所示: /folders/folderA/entities/folderB/entities/fileX

与实际的文件系统非常相似,我们希望处理跨文件夹移动,例如将嵌套子文件夹folderB从 parent移动folderA到 parent folderC。事实上,通常情况下,我们要移动的文件夹本身可能包含它们自己的文件和文件夹子集,深度为任意 K 级。

此注释表明移动文档不会自动移动其关联的子集合。同样,删除文档将放弃删除其底层子集合,使它们成为孤儿。似乎将文件夹(及其实体)从一个父级移动到另一个父级的唯一方法是通过递归克隆 + 删除策略,如果其子实体很大,则可能难以可靠且事务性地完成。

另一种方法是放弃使用子集合并将所有文件夹存储在根目录中,使用文档字段parent_id来指向平面集合中的其他文档。由于 Firestore 的积极索引,这不应影响查询速度但我们无法在本地重现此声明;即,与将所有内容存储在顶层相比,随着数据库中文档总数的增加,通过子集合进行查询的性能要高得多。在此处获得可重现的回购。请注意,repo 使用本地模拟器实例,而不是实际的 Firestore 服务器。

任何建议都会非常有帮助!