Запрос вложенной коллекции из определенного документа

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

Вопрос:

моя база данных firestore выглядит так:

группы ( коллекция ) => группа с определенным идентификатором ( doc ) =>> викторины (вложенная коллекция)

Все, что я хочу сделать, это написать запрос в js, который возвращает массив всех тестов из группы с заданным идентификатором

Код, который я написал, выглядит так:

   export const fetchQuizzesFirebase =  async function (idGroup) {
    if (!idGroup) return [];
    const quizzes = await firestore
      .collection(`groups`)
      .doc(idGroup)
      .collection(`quizzes`)
      .get();
  
    return quizzes.filter(doc => doc.exists).map(doc => ({ id: doc.id, ...doc.data() }));
  }
 

Но это не работает, и я, кажется, не могу это исправить. Что я упускаю?

Ответ №1:

Ваш запрос кажется правильным, но вы должны использовать карту в .docs свойстве вместо QuerySnapshot. Я также удостоверюсь, существует ли этот идентификатор группы console.log(idGroup) , а также .filter() является ли он избыточным. Вы получили снимок запроса и все имеющиеся в нем документы.

 console.log(`${quizzes.size} quizzes found`) // Check quiz count
return quizzes.docs.map(doc => ({ id: doc.id, ...doc.data() }));
               ^^^^
 

Достаточно использовать map только a.

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

1. Спасибо за помощь, я изменил то, как вы сказали , я зарегистрировал идентификатор , и, кажется, все в порядке, но я получаю эту ошибку Unhandled Rejection (TypeError): quizzes.map is not a function , есть идеи, почему?