Firebase云函数中Node.js定时函数无法更新Firestore文档
问题分析与修复方案
你的定时函数在Google Cloud上能运行,但没更新目标Firestore文档,核心是代码里的两处路径和遍历逻辑错误:
- 遍历文档的方式错了:
snapshot[i]是无效写法,得用snapshot.docs[i]才能拿到每个用户的文档快照。 - 文档引用路径错误:不能用
query.get.collection这种写法,正确的是通过用户文档的ref属性获取其引用,再关联子集合others和limiter文档。
修复后的代码如下:
exports.resetLimiter = functions.pubsub .schedule("*/5 * * * *") .onRun(async (context) => { const snapshot = await db.collection("users").get(); // 遍历所有用户文档快照 for (const userDoc of snapshot.docs) { // 通过用户文档引用获取子集合路径 await userDoc.ref.collection("others").doc("limiter") .update({ weeklyFlow: 0.0, monthlyFlow: 0.0, }); } // 云函数需返回值标识执行完成,避免超时判定 return null; });
额外提醒两点:
- 确保
db已经正确初始化(比如通过admin.firestore()获取实例) - 批量更新大量用户时,可以考虑用Promise.all提升效率,避免逐个等待更新完成
内容的提问来源于stack exchange,提问作者Mohammad Khalid Ibrahimi
相关产品推荐
相关产品推荐

