Как получить название документа в коллекции после запроса в Firestore? - PullRequest
0 голосов
/ 28 марта 2020

Я программирую приложение во Flutter, и я хочу иметь возможность запрашивать набор документов в коллекции в Firestore на основе указанных критериев c, а затем с помощью документов, соответствующих указанным критериям, получить имя этих документов. Это то, что я пробовал до сих пор, однако это не работает.

 getDoc(String topic, int grade) {
  return Firestore.instance
    .collection('active')
    .where(topic, isEqualTo: true)
    .where('grade', isEqualTo: grade)
    .getDocuments()
    .then((docRef) {
      return docRef.id;
    });
  }

Весь код работает, за исключением части, где я вызываю docRef.id. Когда я вызываю docRef.id, я получаю сообщение об ошибке:

The getter 'id' isn't defined for the class 'QuerySnapshot'.
Try importing the library that defines 'id', correcting the name to the name of an existing getter, or defining a getter or field named 'id'.d

1 Ответ

0 голосов
/ 28 марта 2020

Когда вы выполняете запрос, результат, который вы получаете при обратном вызове then, равен QuerySnapshot. Даже если есть только один документ, соответствующий условиям, вы получите QuerySnapshot с одним документом. Чтобы получить индивидуальное DocumentSnapshot, которое является результатом, вам нужно l oop над QuerySnapshot.documents.

Что-то вроде:

Firestore.instance
    .collection('active')
    .where(topic, isEqualTo: true)
    .where('grade', isEqualTo: grade)
    .getDocuments()
    .then((querySnapshot) {
      querySnapshot.documens.forEach((doc) {
        print(doc.documentID)
      })
    });
...