我有一个学生的根集合,该集合包含学生文档,并且每个文档都有一些子集合。例如:标记,每个标记文档又具有子集合,依此类推,直到深度4。
现在,如果我删除特定的标记子集合,我希望将其所有嵌套的子集合全部删除,而不是将其挂掉。
我阅读了以下开放github问题 https://github.com/firebase/firebase-admin-node/issues/361
并发现只有当我们知道collection是一个叶子子collection(达到最大深度)时,deepDeleteCollection才可以使用。但是要获取此信息,我们需要按该子集合中的每个文档分别进行查询,这在性能上没有意义。
实现deepCollectionDelete的最佳方法是什么? 请让我知道,以防万一我似乎错过这里。
谢谢。
答案 0 :(得分:0)
但是要获取此信息,我们需要按该子集合中的每个文档分别进行查询,这在性能方面没有意义。
与在Firebase realtime database中删除特定节点内的整个结构不同,您本来需要引用并调用removeValue()
方法,但在Cloud Firestore中这是不可能的。为了删除包含子集合的文档,该子集合就包含具有其他子集合的其他文档,您需要查找并删除子集合中所有从较深层次到较高层次的文档。例如,假设您有一个如下所示的架构:
Firestore-root
|
--- collectionOne
|
--- documentOne
| |
| --- subcollectionOne
| |
| --- documentTwo
| |
| --- subSubCollectionOne
| |
| --- //Documents
|
--- documentThree
|
--- subcollectionThree
|
--- // documents
假设要删除documentOne
,则需要获取subSubCollectionOne
内的所有文档并删除它们,然后找到subcollectionOne
内的所有文档并删除它们,只有在最后才删除documentOne
。
这对性能没有意义。
这不是事实。删除集合和子集合中存在的文档的过程非常好。您可以以较小的块或使用Cloud Function删除客户端上的文档。