Запрос в Firestore с использованием предложения 2 where в flutter

# #firebase #flutter #google-cloud-firestore

Вопрос:

  • У меня есть два атрибута в моей eventClick таблице eventID , и userID поэтому я пытаюсь сделать следующее: если eventID и userID обычно существует, то покажите You have already clicked , если нет, то сделайте запись щелчка. Я думал использовать два предложения и объединить их, но это просто привело к вставке значений.
  • Я пытаюсь использовать приведенный ниже код
 final checkSnapshot = FirebaseFirestore.instance
  .collection('eventClick')
  .where('eventID', isEqualTo: eventID)
  .where('userID', isEqualTo: userID)
  .snapshots();
 
  • Я хочу, чтобы работа была такой
   if (checkSnapshot.exists) {
      print('already exists');
    } else {
      FirebaseFirestore.instance.collection('eventClick').add({
        'eventID': eventID,
        'eventName': eventName,
        'eventImageUrl': eventImageUrl,
        'userID': userID
      });
    }
 

Ответ №1:

Можете ли вы попробовать использовать .get() ? Это должно вернуть QuerySnapshot, который имеет свойство «размер». Если 0, это означает, что такого документа не существует.

 FirebaseFirestore.instance
  .collection('eventClick')
  .where('eventID', isEqualTo: eventID)
  .where('userID', isEqualTo: userID)
  .get()
  .then((checkSnapshot) {
    print(checkSnapshot.docs[0]);
    if (checkSnapshot.size > 0) {
      print("Already Exists");
    } else {
      //add the document
    }
  });
 

Комментарии:

1. Он добавляется в таблицу, если он существует, запрос работает не так, как должен быть.

2. @LavSharma Я переместил снимок из блока if, не могли бы вы поделиться скриншотом этого?

3. QuerySnapshot У A нет data() метода.

4. Спасибо, что заметили, что @RenaudTarnec, я пропустил .docs[0] .

5. checkSnapshot.size() в основном возвращает количество записей в моем eventClick изображении таблицы, показывающем все- Изображение 1 Изображение из firestore — Изображение 2 , изображение 3

Ответ №2:

 FirebaseFirestore.instance
                .collection('task')
                .where('usergroup', isEqualTo: 'software')
                .where('userid', isEqualTo: 'ep434334')
                .snapshots(),