【发布时间】:2021-10-27 23:12:36
【问题描述】:
我有一个带有嵌套子集合的 Firestore 结构,如下所示:
-
项目
-
访问次数
- 观察 → 可以引用 Firebase 存储中的图像
-
访问次数
所以我有以下用例:
1.当我删除观察时,我需要从存储中删除关联的图像。
- 使用云函数 triggered using onDelete 完成。
2。当我删除访问时,我需要删除它的所有观察及其各自的图像。
- 我正在 Flutter 客户端中通过获取所有文档来完成此操作,iterate and delete them one by one。
3.当我删除一个项目时,我需要删除它的所有访问,然后是所有的观察和它们各自的图像。
- 我也在客户端中执行此操作,遍历所有结构(获取所有访问,然后获取所有观察...)。
我知道在客户端解决用例 2 和 3不好选项基于 Firebase 团队的建议,所以应该使用 Cloud Functions 来解决,对吗?
根据official documentation 删除一个集合及其所有子集合可以完成using firebase_tools.firestore.delete 但我认为这个解决方案不能满足用例1,我是对的吗? (另外我正在使用 firebase_tools will lag a lot 阅读)。
另一种选择是在云端进行迭代并删除那里的每个项目。
我没有太多使用 Firebase 的经验,所以我真的不知道解决这个问题的最佳方法是什么...
提前致谢!
【问题讨论】:
-
不是一个好的选择 - 为什么?是什么让您认为您不能/不应该从客户中删除?当您执行该任务时,是不是按预期工作? “滞后很多”是什么意思? Firebase 函数在后台线程上调用,因此使用通常不会看到任何“滞后”。所以这个问题有点模糊 - 你能澄清一下吗?
-
这个answer 可能会有所帮助。
-
谢谢@Jay 我已经读到在客户端中删除它会对安全和性能产生负面影响,但由于我在这个主题上没有太多经验,所以我不能更清楚。我认为 Firebase 团队推荐它,有人告诉我,即使我的代码正常工作,在客户端中执行它也不好。与“滞后很多”相同,我已经阅读了它,我只是想确定我的选择。
-
感谢@AlexMamo 如果您的收藏量较小,在客户端执行此操作似乎是一个有效的解决方案。
-
是的,这在文档中有所说明,但为了清楚起见,需要上下文。从客户端删除集合是完全可以接受的。但是,清楚地了解后果很重要;删除集合需要删除文档。在某些情况下,这意味着下载所有文档以获取其路径,这可能会使设备不堪重负。
标签: firebase google-cloud-firestore