Как получить документ из коллекции на основе поля с firestore?

#javascript #reactjs #firebase #google-cloud-firestore #promise

#javascript #reactjs #firebase #google-облако-firestore #обещание

Вопрос:

Я использую Firestore и React, и у меня следующая ситуация.
У меня есть 2 коллекции: заказы и пользователи.
В каждом заказе есть поле с именем userId, и на его основе я должен получить информацию о пользователе, которая находится внутри коллекции пользователей.
Как я видел, у меня есть 2 обещания: одно для получения заказов, а затем использовать цикл for, получить идентификатор пользователя и снова получить информацию о пользователе.
Итак, я должен объединить 2 объекта.
Внутри объекта order мне также нужны данные пользователя

Я пробовал это, но это не работает.

   useEffect(() => {
    firestore()
      .collection(`orders`)
      .get()
      .then(result => {
        let data = result.docs.map(function(p) {
          return firestore()
            .collection(`users`)
            .doc(p.data().orderId)
            .get()
            .then(function(user) {
    
             
              return {id: user.id,  user.data()};
            });
        });
        Promise.all(data).then(function(values) {
          
          console.log(values);
        
         
        });
      });
  }, []);
  

Ответ №1:

У нас нет никакой информации о том, почему это не работает… есть ли какая-либо ошибка или она просто ничего не показывает.

В любом случае, я создал ту же структуру в своем тестовом Firestore и использовал ваш код (все, что находится внутри useEffect) напрямую в nodejs и обнаружил только одну ошибку. В последнем возврате есть SyntaxError: Unexpected token . .

Я исправил его на:

 return {id: user.id,  data: user.data()};
  

И теперь код возвращает значения в журнале консоли. Это может быть причиной.