data() не является функцией для запроса firebase

#javascript #firebase #google-cloud-firestore

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

Вопрос:

Я некоторое время пытался выяснить, как запрашивать базу данных Firebase, но безрезультатно. Вот что у меня есть прямо сейчас:

 async query(){
    const bar = firebase.firestore().collection('foo');
    const res = await bar.orderBy('gopher').limit(20).get();
}
 

res это не фактические данные, а скорее какой-то внутренний объект:

 {
    o_: {
        J_ : {
             fromCache: false,
             ne: true,
             ...
        }
    },
    q_ : {
         ...
    }
}
 

Для структуры данных у меня есть вызываемая коллекция foo и несколько документов с уникальными идентификаторами, каждый из которых имеет вызываемое числовое поле gopher . Я пытаюсь отсортировать gopher и получить 20 документов вверху, но res.data() это не функция и res.data не определено.

Ответ №1:

res является объектом типа QuerySnapshot. Если вы хотите увидеть результаты запроса, вы можете получить необработанные данные, используя шаблон, описанный в документации. Я переименовал переменные, чтобы они были более наглядными.

 const fooCollection = firebase.firestore().collection('foo');
const querySnapshot = await fooCollection.orderBy('gopher').limit(20).get();
if (querySnapshot.size > 0) {
    querySnapshot.forEach(function(doc) {
        console.log(doc.id, " => ", doc.data());
    });
}
else {
    console.log("No documents in the results");
}
 

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

1. querySnapshot.size , нет querySnapshot.size() , но в остальном это отлично работает! Спасибо

Ответ №2:

Это res.docs не должно быть res.data

res.docs содержит снимок документа array firestore.

Для печати всех данных

 console.log(res.docs.map(snap=>snap.data()));
 

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

1. res.docs по-прежнему возвращает тот же странный внутренний объект firestore. Не сами фактические данные. Но он возвращает 20.

2. возвращает false . Как я уже сказал, он по-прежнему возвращает массив из 20 объектов в массиве, просто странные внутренние вещи, такие как {o_, j_}...

3. Я понял, что массив содержит документы firestore, к которым затем можно получить доступ с помощью метода data(). Например. Первая запись будет br res.docs[0].data()

4. Нет, res.docs.data() это не функция и res.docs.data она не определена.

5. Вы должны получить доступ следующим образом res.docs[0].data();