我正在开发一个Flutter应用程序,并且正在使用Firebase数据库作为数据库服务。
现在,由于我的应用程序是任务管理应用程序,所以我的数据库具有三个主要集合:
+角色
+任务
+用户
每个角色都是具有唯一标识和名称的文档
每个任务都是一个具有唯一标识,名称和角色标识的文档
现在,在应用程序中,用户可以在数据库中添加角色,我只需将新的角色文档添加到角色集合中
但是在删除角色时我陷入困境。
显然,角色和任务是一对多的关联,因为一个角色不能与一个或多个任务相关联,但是一个任务最多只能具有一个角色。
因此,当我要删除角色时,我也必须删除与其关联的任务,并且仅删除该角色会在任务中生成空错误,因为它不再在数据库中找到指定的角色。 >
现在,我真的在flutter Firebase文档中找不到有关如何根据所选条件删除多个文档的任何提示。
例如,基于文档ID删除一个文档很简单
Future<void> deleteRole(Role role) { final reference = databaseInstance.document('/roles/${role.id}'); return reference.delete(); }
如果我想基于某些条件(例如someId)读取任务,我将只写这样的东西
Stream<List<Task>> readTasksStream({@required String someId}) { Stream<QuerySnapshot> snapshots = databaseInstance .collection('tasks') .where('someId', isEqualTo: someId) .snapshots(); //now deserialize the data to objects and return it return snapshots.map((snapshot) => snapshot.documents .map((snapshot) => Task.fromMap(snapshot.data)) .toList()); }
但是在这种情况下,我如何实际删除基于someId的任务呢?像这样的东西:
deleteTasksAssociatedWithARole({@required String roleId}) { Stream<QuerySnapshot> snapshots = databaseInstance .collection('tasks') .where('someId', isEqualTo: someId) .snapshots(); //now I want to delete the selected document from the querysnapshot // but how ???????? }
我希望你能在这里得到我想要的。任何建议或帮助都非常欢迎。非常感谢
我正在开发一个Flutter应用程序,并且正在使用Firebase数据库作为数据库服务。现在,由于我的应用程序是任务管理应用程序,因此我的数据库具有三个主要集合:+角色+任务+ ...
要删除查询中所有匹配的文档,请在forEach
的流上循环,然后依次删除它们。