You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 02:58:19