我是云功能方面的新手。每当创建文档时,我都想创建一个新字段counter
。
我尝试了以下代码:
exports.createCounter = functions.firestore.document('users/{userId}').onCreate((snap,
context) => {
console.log('onCreate created');
return snap.data.ref.set({counter: 0}, {merge: true})
.then(() => {
console.log("Count is created! "+userId);
})
.catch((error) => {
console.error("Counter Error writing document: ", error);
});
});
并使用firebase-admin
:
exports.createCounter = functions.firestore.document('users/{userId}').onCreate((snap, context) => {
const id = context.params.userId;
console.log('onCreate created');
return admin.firestore().collection('users')
.doc(id).set({counter: 0}, {merge: true})
.then(() => {
console.log("Document successfully written! "+id);
})
.catch((error) => {
console.error("Error writing document: ", error);
});
});
但是创建新文档时都不会触发两者。
更新
首先,我创建users/userId/collection/doc
。创建后,我想向counter
users/userId
字段
答案 0 :(得分:1)
评论后更新
在users/userId
集合下创建文档时,您可以通过修改下面显示的第二个解决方案的代码在users/userId/theCollection
文档中添加字段。
仅在子集合级别触发,通过id
对象获取父文档context
并基于此DocumentReference
构建其id
,如下所示:< / p>
exports.createCounter = functions.firestore.document('users/{userId}/theCollection/{docId}').onCreate((snap,
context) => {
const id = context.params.userId;
return admin.firestore().collection('users')
.doc(id).set({ counter: 0 }, { merge: true })
.then(() => {
console.log("Count is created! " + userId);
return null;
})
.catch((error) => {
console.error("Counter Error writing document: ", error);
return null;
});
});
初始答案
以下应该可以解决问题:
exports.createCounter = functions.firestore.document('users/{userId}').onCreate((snap,
context) => {
console.log('onCreate created');
const docRef = snap.ref;
return docRef.set({counter: 0}, {merge: true})
.then(() => {
console.log("Count is created! "+userId);
return null;
})
.catch((error) => {
console.error("Counter Error writing document: ", error);
return null;
});
});
请注意,您不必执行snap.data.ref
即可获得DocumentReference
,而必须执行snap.ref
。实际上,snap
是DocumentSnapshot
,您需要使用其ref
属性。
您的第二个代码段应该正常运行,但是您需要在then()
和catch()
中返回一个值,以向Cloud Function平台指示该功能的工作已完成。请注意,您需要对以上代码执行相同的操作。我建议您观看Firebase视频系列中的有关“ JavaScript Promises”的3个视频:https://firebase.google.com/docs/functions/video-series/,它们解释了这一关键点。
exports.createCounter = functions.firestore.document('users/{userId}').onCreate((snap, context) => {
const id = context.params.userId;
console.log('onCreate created');
return admin.firestore().collection('users')
.doc(id).set({counter: 0}, {merge: true})
.then(() => {
console.log("Document successfully written! "+id);
return null;
})
.catch((error) => {
console.error("Error writing document: ", error);
return null;
});
});