简体   繁体   English

Flutter - Firebase - 删除文档而不访问它

[英]Flutter - Firebase - Delete a document without having access to it

I am trying to have access to notificationId once it gets created however the delete function deletes all the documents under this collection ('user-notifications').我试图在创建 notificationId 后访问它,但是删除 function 会删除该集合(“用户通知”)下的所有文档。

Do you know what I need to change so I can remove only one document rather than all documents in this collection?您知道我需要更改什么才能只删除一个文档而不是该集合中的所有文档吗?

Future<String> likeAnnouncementNotification(String announcementId,
      String imageUrl, String ownerUid, String uid, List liked) async {
    String notificationid = const Uuid().v1();
    String res = "Some error occurred";
    try {
      if (liked.contains(uid)) {
        FirebaseFirestore.instance
            .collection('notifications')
            .doc(ownerUid)
            .collection('user-notifications')
            .where("uid", isEqualTo: FirebaseAuth.instance.currentUser?.uid)
            .get()
             .then((value) {
          value.docs.forEach((document) {
            document.reference.delete();
         
          });
        });
      } else {
        FirebaseFirestore.instance
            .collection('notifications')
            .doc(ownerUid)
            .collection('user-notifications')
            .doc(notificationid)
            .set(
          {
            'imageUrl': imageUrl,
            'announcementId': announcementId,
            'notificationid': notificationid,
            'timestamp': DateTime.now(),
            'type': 0,
            'uid': uid
          },
        );
      }
      res = 'success';
    } catch (err) {
      res = err.toString();
    }
    return res;
  }


the only thing i see that you need to specify what notification document you went to delete add it like parameter when you call likeAnnouncementNotification function我唯一看到你需要指定你要删除的通知文档当你调用likeAnnouncementNotification时添加它 like 参数 function

Future<String> likeAnnouncementNotification(
    String announcementId,
    String imageUrl,
    String ownerUid, 
    String uid,
    List liked,
) async {
    String notificationid = const Uuid().v1();
    String res = "Some error occurred";
    try {
      if (liked.contains(uid)) {
        FirebaseFirestore.instance
            .collection('notifications')
            .doc(ownerUid)
            .collection('user-notifications')
            .where("uid", isEqualTo: FirebaseAuth.instance.currentUser?.uid)
            .get()
            .then((value) {
          value.docs.forEach((notification) {
            FirebaseFirestore.instance
                .collection('notifications')
                .doc(ownerUid)
                .collection('user-notifications')
                .doc(notification.id) // this is the problem you need to specify what notification document you went to delete.
                .delete();
          });
        });
      } else {
        FirebaseFirestore.instance
            .collection('notifications')
            .doc(ownerUid)
            .collection('user-notifications')
            .doc(notificationid)
            .set(
          {
            'imageUrl': imageUrl,
            'announcementId': announcementId,
            'notificationid': notificationid,
            'timestamp': DateTime.now(),
            'type': 0,
            'uid': uid
          },
        );
      }
      res = 'success';
    } catch (err) {
      res = err.toString();
    }
    return res;
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM