我写这篇文章是因为我面临着一些问题,我预定的云功能。
**第一步:**访问/ collection:users => doc:uid => collection:bank => doc:account。
**第二步:**每24小时将我的用户(所有用户)的dailyRewardCounter增加150。
问题是我的函数不能访问我的用户的集合uid并返回错误,因为预定函数不能读取uid(参见图片)。
问题: 你知道如何根据每个用户的个人“uid”访问每个用户的子集合,以便在集合“bank”中添加150吗?
export const dailyCreditReinitialize = functions.pubsub.schedule('0 0 * * *').onRun(async (context) => {
const uid = context.auth!.uid; // seems like the function does not read that
const userRef = db.collection('users').doc(uid);
const userSnap = await userRef.get();
const getUid = userSnap.data()!.uid;
const bankCollectionRef = db.collection('users').doc(getUid).collection('bank');
return bankCollectionRef.get()
.then(querySnapshot =>{
if (querySnapshot.empty){
console.log("Nothing to return")
return null;
} else {
let batch = db.batch();
querySnapshot.forEach(doc => {
batch.update(doc.ref, {
dailyRewardCounter: 150,
});
});
return batch.commit();
}
})
.catch(error => {
console.log(error);
return null;
});
})
字符串
1条答案
按热度按时间cuxqih211#
与实时数据库触发的云函数相反,对于计划的云函数,
context.auth
为null。如果我正确地理解了你的问题(“增加我的用户(所有的)”),你需要循环所有的用户文档的集合。一些沿着以下行的伪代码:
1.在users集合上循环并获取所有用户ID
1.对于每个用户,获取
bank
集合的querySnapshot1.在每个querySnapshots上循环更新银行单据