每次我尝试使用documentSnapshot.delete()以编程方式删除文档时,firebase只删除文档而不删除它的子集合。我想通过按下按钮永久删除文档及其所有子集合,而每次用户尝试创建同一文档时,它都是空的。
正确的做法是什么?
(已关闭)
下面是对我有效的代码:
CollectionReference<Map<String, dynamic>> collectionReference = FirebaseFirestore.instance.collection('collection name').doc('document name').collection('collection name');
DocumentReference<Map<String, dynamic>> documentReference = collectionReference.doc('document name');
documentReference.collection('lists').get().then((lists) {
lists.docs.forEach((listElement) {
documentReference.collection('lists').doc(listElement.id.toString()).collection('cards').get().then((cards) {
cards.docs.forEach((cardElement) {
documentReference.collection('lists').doc(listElement.id.toString()).collection('cards').doc(cardElement.id.toString()).delete();
});
});
documentReference.collection('lists').doc(listElement.id.toString()).delete();
});
});
await documentReference.delete();
2条答案
按热度按时间w6lpcovy1#
删除
document
不会自动删除其子集合中的所有文档。firestore API中没有随文档沿着删除子集合的方法,需要循环并删除子集合中的文档,然后删除父
document
。这里有一个链接,以便更好地理解。
7kqas0il2#
我不知道Dart,但下面是我使用PHPFirestore的简单解决方案;
它会删除所有找到的文档,不管它们嵌套得有多深。不存在的文档不会在快照和查询中显示,所以这就是为什么我使用
listDocuments()
方法,尽管我牺牲了一点性能。