MongoDB Atlas触发器实现自增字段遇await关键字错误求助
MongoDB Atlas触发器实现自增字段报错求助
我尝试通过MongoDB Atlas触发器实现自增字段功能,尽管遵循了MongoDB官方文档指引,但在触发器设置中运行代码时仍遇到错误:
error: unknown: Unexpected reserved word 'await'. (46:18)
错误指向第一个await函数所在行。
以下是我编写的触发器函数:
exports = function(changeEvent) { var docId = changeEvent.fullDocument._id; const countercollection = context.services.get("Cluster0").db("test").collection("counters"); const samplecollection = context.services.get("Cluster0").db("test").collection("samples"); var counter = await countercollection.findOneAndUpdate({_id: changeEvent.ns },{ $inc: { seq_value: 1 }}, { returnNewDocument: true, upsert : true}); var updateRes = await samplecollection.updateOne({_id : docId},{ $set : { sampleId: counter.seq_value}}); console.log(`Updated ${JSON.stringify(changeEvent.ns)} with counter ${counter.seq_value} result : ${JSON.stringify(updateRes)}`); };
我的数据库中已创建counters集合用于维护自增序列。
解决方法
报错原因很明确:await关键字只能在异步函数中使用,而当前的触发器函数没有声明为async。只需修改函数定义,加上async关键字即可解决该错误。
修改后的完整代码:
exports = async function(changeEvent) { var docId = changeEvent.fullDocument._id; const countercollection = context.services.get("Cluster0").db("test").collection("counters"); const samplecollection = context.services.get("Cluster0").db("test").collection("samples"); var counter = await countercollection.findOneAndUpdate( {_id: changeEvent.ns }, { $inc: { seq_value: 1 }}, { returnNewDocument: true, upsert : true} ); var updateRes = await samplecollection.updateOne( {_id : docId}, { $set : { sampleId: counter.seq_value}} ); console.log(`Updated ${JSON.stringify(changeEvent.ns)} with counter ${counter.seq_value} result : ${JSON.stringify(updateRes)}`); };
额外检查点:
- 确认
changeEvent.ns的值与counters集合中_id的格式完全匹配,保证计数器能被正确找到或创建 - 确保触发器的权限配置足够操作
counters和samples两个集合
内容的提问来源于stack exchange,提问作者Freedom Trail
相关产品推荐
相关产品推荐

