我只想更新那些字段,我传递给其他数据的那些键应该保持不变,但在我的情况下,我传递给其他人的更改的键设置为$2
null
答案 0 :(得分:0)
如果要更新一个或多个key
字段,则应仅发送要更新的键值对。
在您的代码中,您正在发送查询中的全部对象。
因此,如果您要更新first_name
和last_name
,则仅发送first_name
和last_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];
}