Nodejs + mongodb + dynamic $ set而不声明变量

时间:2015-11-15 12:45:20

标签: node.js mongodb

Image

我一直在使用这种方法动态更新对象,有没有办法在不设置变量的情况下执行此操作?

这就是我目前使用的:

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 })
    }
})

相反,它返回一个数组

1 个答案:

答案 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 })
      }
    }
)