使用Firebase Gen2函数调用Firestore时出现query is not a function错误
问题解决:Firebase Functions Gen2 拉取Firestore集合报错 "query is not a function"
错误原因
getDocs导入路径错误:你从firebase-functions/v2/firestore导入getDocs,但这个模块的getDocs是用于Firestore触发器的方法,并非Admin SDK中读取文档的工具方法。- 不存在的
db.query方法:Firebase Admin SDK的Firestore实例没有query方法,集合引用本身就可以直接用于获取文档快照。
修正后的代码
const { initializeApp } = require('firebase-admin/app'); const { getFirestore, getDocs } = require('firebase-admin/firestore'); const { onRequest, logger } = require("firebase-functions/v2/https"); initializeApp(); const db = getFirestore(); const cors = require('cors')({origin:true}); exports.getReviews = onRequest(async(request, response) => { cors(request, response, async() => { logger.info("getReviews logging!", {structuredData: true}); const reviews = []; const appRef = db.collection("feedback"); const querySnapshot = await getDocs(appRef); querySnapshot.forEach((doc) => { reviews.push(doc.data()); }); response.send(reviews); }); });
关键修正点
- 把
getDocs的导入源改为firebase-admin/firestore,这是Admin SDK中查询Firestore文档的正确入口。 - 删除多余的
db.query(appRef)调用,直接将集合引用appRef传入getDocs即可完成查询。 - 补充导入
onRequest和logger(原代码中使用了这两个方法但未声明导入)。 - 移除不必要的
any类型标注(JavaScript环境无需此类标注,TypeScript环境可根据需求替换为更精准的类型)。
内容的提问来源于stack exchange,提问作者Moblize IT
相关产品推荐
相关产品推荐

