Apps Script访问Firestore子集合报错:getDocuments不是函数
问题解决:Firestore访问子集合报错TypeError
错误原因
你代码里的allUserDocuments[i]是DocumentSnapshot(文档快照)对象,这类对象只包含文档的数据和元信息,并没有getDocuments方法。要访问文档下的子集合,得先定位到该文档的引用,再通过引用获取子集合。
正确写法
方法一:拼接子集合完整路径
直接用用户文档ID拼接出users/{userId}/hikes的完整路径,再调用firestore.getDocuments:
const allUserDocuments = firestore.getDocuments("users"); for (let i = 0; i < allUserDocuments.length; i++) { const userDoc = allUserDocuments[i]; // 拼接子集合路径 const hikesPath = `users/${userDoc.id}/hikes`; // 获取该用户的所有hikes文档 const userHikes = firestore.getDocuments(hikesPath); // 这里可以处理hikes数据,比如遍历输出 for (let hike of userHikes) { console.log(hike.id, hike.data()); } }
方法二:通过文档引用获取子集合
先获取用户文档的引用,再从引用中拿到子集合引用,最后获取文档:
const allUserDocuments = firestore.getDocuments("users"); for (let i = 0; i < allUserDocuments.length; i++) { const userDocSnapshot = allUserDocuments[i]; // 获取用户文档的引用 const userDocRef = firestore.getDocumentReference(`users/${userDocSnapshot.id}`); // 获取hikes子集合的引用 const hikesCollection = userDocRef.getCollection("hikes"); // 获取子集合下的所有文档 const userHikes = hikesCollection.getDocuments(); // 处理数据 console.log(userHikes); }
额外注意
- 原代码里的
i和oneUserHikesDocument没有用let/const声明,会变成全局变量,建议加上声明避免潜在问题。 - 如果你的Firestore操作涉及大量数据,注意Google Apps Script的执行时间限制,必要时可以分批处理。
内容的提问来源于stack exchange,提问作者Dale
相关产品推荐
相关产品推荐

