#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();