簡體   English   中英

無法從 Firestore 集合中獲取數據

[英]Cannot fetch data from Firestore collection

在此處輸入圖像描述

我想從 Firebase 的 et_events 集合中獲取數據並將事件顯示在前端。

我在events.js文件中寫了如下代碼,嘗試獲取Firebase的事件信息,但是獲取不到。

 export const actions = { fetchAllEvents: async ({ dispatch, commit }, eventIds) => { // TODO: fetch events from firestore console.log("start") const eventsSnap = await getDocs(query(eventsRef, where(documentId(), 'et_events', eventIds))) const events = await Promise.all( eventsSnap.docs.map(async snap => { const organization = await dispatch('fetchOrganization', snap.data().organizationId) return { id: snap.id, organization, isEvent: true, ...snap.data(), } }), ) events.sort((a, b) => { if(a.startDT > b.startDT) return 1; if(a.startDT < b.startDT) return -1; return 0; }); events.splice(1, 0, { isEvent: false, imgUrl: 'https://storage.googleapis.com/eventomy/statics/thumbnails/tutorial.png', title: 'Eventomyを始めよう', }) // remove code above and put your code instead commit(SET_EVENTS, events) }, }

另外,我不太明白這段代碼中“dispatch”、“commit”和“eventsSnap”的含義。 誰能告訴我?

完整代碼發布如下。

 const SET_EVENTS = 'SET_EVENTS' export const state = () => ({ events: [], }) export const mutations = { SET_EVENTS: (state, events) => { state.events = events }, } export const getters = { allEvents(state) { return state.events }, } // import { doc, getDoc } from "firebase/firestore"; export const actions = { fetchAllEvents: async ({ dispatch, commit }, eventIds) => { // TODO: fetch events from firestore console.log("start") const eventsSnap = await getDocs(query(eventsRef, where(documentId(), 'et_events', eventIds))) const events = await Promise.all( eventsSnap.docs.map(async snap => { const organization = await dispatch('fetchOrganization', snap.data().organizationId) return { id: snap.id, organization, isEvent: true, ...snap.data(), } }), ) events.sort((a, b) => { if(a.startDT > b.startDT) return 1; if(a.startDT < b.startDT) return -1; return 0; }); events.splice(1, 0, { isEvent: false, imgUrl: 'https://storage.googleapis.com/eventomy/statics/thumbnails/tutorial.png', title: 'Eventomyを始めよう', }) // remove code above and put your code instead commit(SET_EVENTS, events) }, }

我不太確定您想在代碼上實現什么。 根據您上面的陳述,您只想獲取et_events集合的文檔數據。 以下是從et_events獲取數據的一些方法。

et_events獲取所有文檔:

import { collection, getDocs } from "firebase/firestore";

const querySnapshot = await getDocs(collection(db, "et_events"));
querySnapshot.forEach((doc) => {
  // doc.data() is never undefined for query doc snapshots
  console.log(doc.id, " => ", doc.data());
  // Do something here...
});

要獲取過濾后的文檔,請使用where()查詢:

import { collection, query, where, getDocs } from "firebase/firestore";

const q = query(collection(db, "et_events"), where("<FIELDNAME>", "==", "<FIELDVALUE>"));

const querySnapshot = await getDocs(q);
querySnapshot.forEach((doc) => {
  // doc.data() is never undefined for query doc snapshots
  console.log(doc.id, " => ", doc.data());
  // Do something here....
});

如果您知道特定文檔的文檔 ID:

import { doc, getDoc } from "firebase/firestore";

const docRef = doc(db, "et_events", "<DOCUMENTID>");
const docSnap = await getDoc(docRef);

if (docSnap.exists()) {
  console.log("Document data:", docSnap.data());
  // Do something here...
} else {
  // doc.data() will be undefined in this case
  console.log("No such document!");
}

有關更多信息,您可以查看使用 Cloud Firestore 獲取數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM