我一直在使用这种方法动态更新对象,有没有办法在不设置变量的情况下执行此操作?
这就是我目前使用的:
var query = {}
query["settings.panels."+req.params.type+"."+req.params.id] = req.body
mongoPool.collection('settings').updateOne(
{_id: req.user.profile.id},
{
$set: query,
(err, doc) => {
if (!err) {
res.status(200).send({ errorStatus: false, returnData: doc }
} else {
console.log(err);
res.status(200).send({ errorStatus: true, errorMsg: 'Db Error', errorCode: 405 })
}
})
这就是我想要的:
mongoPool.collection('settings').updateOne(
{_id: req.user.profile.id},
{
//notice I didnt use query & this returns an array
$set: ["settings.panels."+req.params.type+"."+req.params.id] : req.body
}, (err, doc) => {
if (!err) {
res.status(200).send({ errorStatus: false, returnData: doc }
} else {
console.log(err);
res.status(200).send({ errorStatus: true, errorMsg: 'Db Error', errorCode: 405 })
}
})
相反,它返回一个数组
答案 0 :(得分:1)
只要您使用Node.js 4.x或更高版本,就可以使用其对computed property names的ES6支持来执行此操作:
mongoPool.collection('settings').updateOne(
{_id: req.user.profile.id},
{
$set: { ["settings.panels."+req.params.type+"."+req.params.id]: req.body }
},
(err, doc) => {
if (!err) {
res.status(200).send({ errorStatus: false, returnData: doc }
} else {
console.log(err);
res.status(200).send({ errorStatus: true, errorMsg: 'Db Error', errorCode: 405 })
}
}
)