FLUTTER:如何使用cloud firestore中的where子句删除多个文档?

Usm*_*ahi 5 dart firebase flutter google-cloud-firestore

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

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

Run Code Online (Sandbox Code Playgroud)

sam*_*yap 7

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

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

另外,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);
          }
      });

Run Code Online (Sandbox Code Playgroud)

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

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();
  });
}
Run Code Online (Sandbox Code Playgroud)

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