簡體   English   中英

FLUTTER:如何在cloud firestore 中使用where 子句刪除多個文檔?

[英]FLUTTER: How to delete multiple documents using where clause in cloud firestore?

我想刪除 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);
          }
      });

而且,這不是執行多個刪除的推薦方法,您需要的是批寫入,批寫入允許您將多個寫入操作作為一個批處理執行,該批處理可以包含設置、更新或刪除操作的任意組合。

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文檔了解語法更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM