我想更新用户资料

时间:2019-06-10 12:19:51

标签: node.js mongodb typescript mongoose

我只想更新那些字段,我传递给其他数据的那些键应该保持不变,但在我的情况下,我传递给其他人的更改的键设置为$2

null

2 个答案:

答案 0 :(得分:0)

如果要更新一个或多个key字段,则应仅发送要更新的键值对。

在您的代码中,您正在发送查询中的全部对象。

因此,如果您要更新first_namelast_name,则仅发送first_namelast_name

const userObj = {
        first_name: req.body.first_name,
        last_name: req.body.last_name
 };
userModel.findByIdAndUpdate({'_id':req.body._id}, { $set: userObj }, { upsert: true, new: true }
);

这不会更新其他值。

您还可以具有在更新之前删除null值键的功能,这样就不会替换原始数据。

答案 1 :(得分:0)

您可以使用循环来填充给定的字段:

  let newObj = {};
    Object.keys(req.body).forEach(function(prop) {
        newObj[prop] = req.body[prop];
    });

OR

使用findOne()通过以下操作获取记录字段:

  let query = { $set: {} };
  for (let key in req.body) {
    if (customer[key] && customer[key] !== req.body[key])// if the field we have in req.body exists, we're gonna update it
      query.$set[key] = req.body[key];
  }