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
相关产品推荐
相关产品推荐

