我正在尝试发出放置请求以更改某些信息。我从请求正文中获取新信息,但是我想要一些可选的参数
示例: 旧记录 --> {name: ugur, surname:k}
put 请求是这样的--> {name: uur}
所以我希望姓氏保持不变,但现在我不想这样做了。
这是代码片段:
await User.findOneAndUpdate({filter}, {$set:{name:req.body.name, surname:req.body.surname}})
这样当用户不发送姓氏时,用户姓氏将被更新为空。 有没有办法让用户使用旧姓?例如-->
await User.findOneAndUpdate({filter}, {$set:{name:req.body.name, surname:req.body.surname || this.getsurname}})
我想在不使用 if else 或先 findOne 然后更新用户的情况下解决它。
答案 0 :(得分:0)
如果未提供字段(未定义或为空),请不要在更新中包含字段:
const update = {
...name && { name },
...surname && { surname },
}
await User.findOneAndUpdate({filter}, {$set: update})
&&
运算符返回表达式的右部分,如果表达式的第一部分为真,...
是一个结构运算符,所以基本上 ...name && { name }
表示如果名称存在,添加结构 {{1} } 到基础对象中,为了使事情更清楚,假设我们需要在对象中添加等于 { name }
的属性名称,仅当 request.body.name
存在时:request.body.name