You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Firestore调用docSnap.data()报TypeError:该函数不存在

解决Firebase Firestore中TypeError: docSnap.data is not a function错误

问题根源

你调用getDocs()查询的是整个Events集合,它返回的是QuerySnapshot对象——这是集合所有文档的快照集合,而不是单个文档的DocumentSnapshot。data()方法是单个文档快照独有的,集合快照没有这个方法,所以会触发报错。

正确处理代码

根据你的需求,有两种处理方式:

1. 遍历集合中所有文档

如果要获取集合里的全部数据,需要遍历QuerySnapshot中的每个文档:

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

export default async function getEvents() {
    // 你已经从app导入了db,无需重复调用getFirestore(app)
    const eventsCollection = collection(db, "Events");
    const querySnapshot = await getDocs(eventsCollection);
    
    // 逐个打印文档ID和数据
    querySnapshot.forEach((doc) => {
        console.log(`${doc.id} =>`, doc.data());
    });

    // 也可以把所有数据整理成带ID的数组
    const eventsList = querySnapshot.docs.map(doc => ({
        id: doc.id,
        ...doc.data()
    }));
    console.log(eventsList);
}

2. 获取单个指定文档

如果你的目标是获取某一个文档,应该用getDoc()替代getDocs():

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

export default async function getSingleEvent() {
    // 替换成你要获取的文档ID
    const eventDoc = doc(db, "Events", "目标文档ID");
    const docSnapshot = await getDoc(eventDoc);
    
    if (docSnapshot.exists()) {
        console.log(docSnapshot.data());
    } else {
        console.log("目标文档不存在");
    }
}

额外提示

代码里已经从./app导入了db,没必要在函数里重复执行getFirestore(app),直接用导入的实例即可,减少冗余。

内容的提问来源于stack exchange,提问作者Muneeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:40:39