Firebase flatter:如何在CloudFireStore中使用where子句删除多个文档?

Firebase flatter:如何在CloudFireStore中使用where子句删除多个文档?,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我想删除driverID与登录用户ID相等的文档。我正在使用下面的代码,但它不起作用 requestToJoinReference.where('driverID'==user.uid).getDocuments().then((snapshot) { for(DocumentSnapshot ds in snapshot.documents) { // ds.reference.delete();

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

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


这不是在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);
          }
      });

而且,这不是执行多个删除的推荐方法,您需要的是批写入,批写入允许您将多个写入操作作为单个批执行,该批可以包含set、update或delete操作的任意组合

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();
  });
}
Future batchDelete(){
WriteBatch batch=FirebaseFirestore.instance.batch();
返回requestToJoinReference.where('driverID',isEqualTo:user.uid).get().then((querySnapshot){
querySnapshot.documents.forEach((文档){
批处理。删除(文件。参考);
});
返回batch.commit();
});
}

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

这不是在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);
          }
      });

而且,这不是执行多个删除的推荐方法,您需要的是批写入,批写入允许您将多个写入操作作为单个批执行,该批可以包含set、update或delete操作的任意组合

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();
  });
}
Future batchDelete(){
WriteBatch batch=FirebaseFirestore.instance.batch();
返回requestToJoinReference.where('driverID',isEqualTo:user.uid).get().then((querySnapshot){
querySnapshot.documents.forEach((文档){
批处理。删除(文件。参考);
});
返回batch.commit();
});
}
我还建议您将依赖项升级到最新版本,并参考文档了解语法更改