【问题标题】:FLUTTER: How to delete multiple documents using where clause in cloud firestore?FLUTTER:如何使用 Cloud Firestore 中的 where 子句删除多个文档?
【发布时间】:2021-01-07 14:53:47
【问题描述】:

我想删除 driverID 与登录用户 ID 等效的文档。我正在使用下面的代码,但它不起作用。

      requestToJoinReference.where('driverID'==user.uid).getDocuments().then((snapshot) {
        for(DocumentSnapshot ds in snapshot.documents)
          {
            // ds.reference.delete();
            print(ds.reference);
          }
      });

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    这不是在 firebase 中使用 where 子句的正确语法,您正在寻找的是

     requestToJoinReference.where('driverID', isEqualTo: user.uid).getDocuments().then((snapshot) {
            for(DocumentSnapshot ds in snapshot.documents)
              {
                //ds.reference.delete();
                print(ds.reference);
              }
          });
    

    另外,delete() 是 aysnc,所以你必须让你的 forEach 循环也异步

    requestToJoinReference.where('driverID', isEqualTo: user.uid).getDocuments().then((snapshot) {
            for(DocumentSnapshot ds in snapshot.documents)async {
                await ds.reference.delete();
                print(ds.reference);
              }
          });
    
    

    而且,这不是执行多次删除的推荐方式,您需要的是批量写入,批量写入允许您作为单个批处理执行多个写入操作,其中可以包含设置、更新或删除操作的任意组合。

    Future<void> batchDelete() {
      WriteBatch batch = FirebaseFirestore.instance.batch();
    
      return  requestToJoinReference.where('driverID', isEqualTo: user.uid).get().then((querySnapshot) {
    
        querySnapshot.documents.forEach((document) {
          batch.delete(document.reference);
        });
    
        return batch.commit();
      });
    }
    

    我还建议您将依赖项升级到最新版本并参考FlutterFire 文档以了解语法更改。

    【讨论】:

      猜你喜欢
      • 2018-04-21
      • 2020-11-28
      • 2018-06-18
      • 1970-01-01
      • 2021-10-21
      • 2021-02-24
      • 1970-01-01
      • 2019-05-29
      相关资源
      最近更新 更多