我们可以通过 findOneAndUpdate 获取我们正在处理的对象吗?

时间:2021-07-14 11:15:23

标签: javascript express mongoose

我正在尝试发出放置请求以更改某些信息。我从请求正文中获取新信息,但是我想要一些可选的参数

示例: 旧记录 --> {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 然后更新用户的情况下解决它。

1 个答案:

答案 0 :(得分:0)

如果未提供字段(未定义或为空),请不要在更新中包含字段:

const update = {
  ...name && { name },
  ...surname && { surname },
}

await User.findOneAndUpdate({filter}, {$set: update})

&& 运算符返回表达式的右部分,如果表达式的第一部分为真,... 是一个结构运算符,所以基本上 ...name && { name } 表示如果名称存在,添加结构 {{1} } 到基础对象中,为了使事情更清楚,假设我们需要在对象中添加等于 { name } 的属性名称,仅当 request.body.name 存在时:request.body.name