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

Node.js结合MongoDB使用+拼接字符串触发语法错误

问题原因与解决方法

你遇到的语法错误是因为在ES5及更早的对象字面量语法中,键名不能直接使用表达式(比如字符串拼接)。你写的{'attachedObjectIds.' + '0' : objId}这种写法,在对象键的位置放了+拼接表达式,不符合旧版JS的对象字面量规则,因此触发SyntaxError。

解决方法有两种:

方法1:先创建对象,再动态赋值

先初始化包含$set的对象,再通过方括号语法给$set添加动态计算的属性:

const updateData = { $set: {} };
updateData.$set['attachedObjectIds.' + iface.toString()] = objId;
let attach_dev = await db.collection("devices").updateOne(
    { '_id': deviceId },
    updateData
);

方法2:使用ES6计算属性名(推荐)

ES6新增了计算属性名特性,允许在对象字面量中用[]包裹表达式作为键名,直接在写法中完成拼接:

let attach_dev = await db.collection("devices").updateOne(
    { '_id': deviceId },
    {
        $set: {
            [`attachedObjectIds.${iface.toString()}`]: objId
        }
    }
);

这里用模板字符串${}拼接变量,外层用[]包裹,即可直接作为对象的键名,完全符合语法规则。

内容的提问来源于stack exchange,提问作者Tomás Arturo Herrera Castro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 04:15:42