Firestore — Как получить идентификатор документа из FirebaseFirestore.QuerySnapshot?

#typescript #firebase #google-cloud-firestore

#typescript #firebase #google-облако-firestore

Вопрос:

Я запрашиваю коллекцию для определенного документа и пытаюсь получить идентификатор документа из результата моего запроса, который относится к типу FirebaseFirestore.QuerySnapshot.

Мой фактический запрос выглядит следующим образом (я использую async / await):

 result = await db.collection("chatrooms").where("userA", "==", req.body.userA)
            .where("userB", "==", req.body.userB).limit(1).get();
  

Я пытался с:

 await result.docs.map(doc => {
            return doc.id
        })
  

Но это дает мне undefined ответ.

Что я делаю не так?

Ответ №1:

QuerySnapshot содержит ноль или более объектов DocumentSnapshot, представляющих результаты запроса. К документам можно получить доступ в виде массива через свойство docs или перечислить с помощью метода forEach. Количество документов можно определить с помощью свойств empty и size.

Таким образом, он вернет массив (QuerySnapshot) из QueryDocumentSnapshot s. Вам нужно перебрать снимки с помощью forEach(), тогда вы сможете получить идентификатор документа из каждого QueryDocumentSnapshot

https://firebase.google.com/docs/reference/js/firebase.firestore.QueryDocumentSnapshot

Если вы используете typescript, вы должны иметь возможность видеть определения, методы и свойства в вашей IDE.

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

1. в VSCode, даже если вы пишете на JS, вы все равно можете увидеть определения TS, если наведете курсор на код Firebase.

2. Я использовал forEach () в своем коде, но все равно получил undefined. как я могу получить возвращаемое значение из async и использовать его в другой функции, которую необходимо запустить после асинхронности?