gpt4 book ai didi

node.js - 如何使用云函数在firestore中创建新字段?

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:52 24 4
gpt4 key购买 nike

我是云函数的新手。我想在创建文档时创建一个新字段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。创建后,我想在 users/userId

中添加一个 counter 字段

最佳答案

根据您的评论进行更新

您可以将字段添加到 users/userId当您在users/userId/theCollection下创建文档时的文档通过修改下面提供的第二个解决方案的代码来收集。

只需在子集合级别触发,获取父文档id通过context对象并构建其 DocumentReference基于此id ,如下:

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()向云函数平台表明该函数的工作已完成。请注意,您需要对上述代码执行相同的操作。我建议您观看 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;
});
});

关于node.js - 如何使用云函数在firestore中创建新字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58519149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com