как получить автоматически сгенерированный идентификатор из базы данных firestore - PullRequest
0 голосов
/ 03 августа 2020

Я создал базу данных в firestore db для хранения комментариев пользователей к сообщениям. База данных автоматически генерирует идентификатор комментария при добавлении комментария. Теперь я хотел удалить комментарий, используя его идентификатор, чтобы не удалять другие рядом с ним. Как я могу получить автоматически сгенерированный идентификатор комментария, чтобы удалить его из базы данных?

Это мой код для добавления комментариев в базу данных.

addComments() {
    commentsRef.document(postId).collection('comments').add({
      'username': currentUser.username,
      'comment': commentController.text,
      'avatar': currentUser.photoUrl,
      'timestamp': DateTime.now(),
      'userId': currentUser.id,
      'likes': {},
    });
    bool isNotPostOwner = postOwnerId != currentUser.id;
    if (isNotPostOwner) {
      activityFeedRef.document(postOwnerId).collection('feedItems').add({
        'type': 'comment',
        'commentData': commentController.text,
        'timestamp': DateTime.now(),
        'postId': postId,
        'ownerId': currentUser.id,
        'username': currentUser.username,
        'userProfileImg': currentUser.photoUrl,
        'mediaUrl': postMediaUrl,
      });
    }
    commentController.clear();
  }

Я попытался использовать этот код, чтобы удалить его но он удаляет все данные в коллекции комментариев

  deleteComment() async {
    QuerySnapshot commentsSnapshot = await commentsRef
        .document(postId)
        .collection('comments')
        .getDocuments();
    commentsSnapshot.documents.forEach((doc) {
      if (doc.exists) {
        doc.reference.delete();
      }
    });
  }

Ответы [ 2 ]

1 голос
/ 03 августа 2020

База данных автоматически генерирует идентификатор комментария

На самом деле, это не совсем так. Клиентский SDK генерирует случайный идентификатор локально, и он практически гарантированно не конфликтует с каким-либо другим идентификатором, который может существовать.

Если вашему клиентскому приложению потребуется работать с документом позже, ему потребуется:

  1. Запомните идентификатор для дальнейшего использования.
  2. Запросите Firestore, чтобы найти документ, используя информацию в полях, чтобы найти его.

Это ваши единственные два options.

Если вы хотите получить идентификатор документа после вызова add (), обратите внимание, что add () возвращает Future, которое разрешается с помощью DocumentReference для нового документа. Этот DocumentReference имеет свойство documentID .

0 голосов
/ 03 августа 2020

вы можете получить идентификатор документа при его создании.

db.collection('students').add({'name': 'John'})
.then((val)=> print(val.documentID)});
...