Google Apps Script连接Firestore报错:TypeError: collection不是函数
解决Firestore查询“TypeError: collection is not a function”问题
核心原因及修复方案
1. 初始化后未正确获取Firestore实例
报错本质是调用collection()的对象不是合法的Firestore实例。在Google Apps Script中,无论使用封装库还是原生Admin SDK,都需先获取正确的Firestore实例再调用集合方法:
方式一:使用FirestoreApp封装库
// 初始化Firebase并获取Firestore实例 function getFirestoreInstance() { var serviceAccount = { /* 你的服务账号JSON配置 */ }; if (!FirebaseApp.getApps().length) { FirebaseApp.initializeApp(serviceAccount); } return FirestoreApp.getFirestore(); // 关键:获取Firestore实例 } // 查询时间戳之后的文档 function queryRecentDocs() { var firestore = getFirestoreInstance(); var cutoffTime = new Date('2024-05-01'); // 你的目标时间戳 // 正确调用collection方法 var query = firestore.collection('目标集合名').where('timestamp', '>', cutoffTime); var docs = query.getDocuments(); // 后续文档处理逻辑 }
方式二:使用原生Firebase Admin SDK
function initAdminFirestore() { var admin = require('firebase-admin'); var serviceAccount = { /* 你的服务账号JSON配置 */ }; if (!admin.apps.length) { admin.initializeApp({ credential: admin.credential.cert(serviceAccount) }); } return admin.firestore(); // 关键:获取数据库实例 } // 执行查询 function runQuery() { var db = initAdminFirestore(); var colRef = db.collection('目标集合名'); // 正确调用collection var query = colRef.where('timestamp', '>', new Date()); // 处理查询结果 }
2. 检查第49行的调用对象
直接定位第49行代码,确认调用collection()的是Firestore实例,而非Admin应用对象(比如admin.collection(...)是错误写法,必须是admin.firestore().collection(...))。
3. 确认依赖库版本
如果使用Firestore Apps Script官方库,确保更新到最新版本(脚本ID:1hguuh4Zx72XVC1Zldm_vTtcUUKUA6iBUOoGnJUWLfqDWx5WlOJHqYkrt),旧版本可能存在方法命名或实例获取逻辑的差异。
内容的提问来源于stack exchange,提问作者Namit Sambare
相关产品推荐
相关产品推荐

