【问题标题】:can we get the object that we are dealing with by findOneAndUpdate?我们可以通过 findOneAndUpdate 获取我们正在处理的对象吗?
【发布时间】:2021-07-14 11:15:23
【问题描述】:

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

示例: 旧记录 --> {name: ugur, surname:k}

put 请求是这样的--> {name: uur}

所以我希望姓氏保持不变,但现在它会是空的,我不想这样做。

这里是代码 sn-p :

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 然后更新用户的情况下解决它。

【问题讨论】:

    标签: javascript express mongoose


    【解决方案1】:

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

    const update = {
      ...name && { name },
      ...surname && { surname },
    }
    
    await User.findOneAndUpdate({filter}, {$set: update})

    && 运算符如果表达式的第一部分为真,则返回表达式的右部分,... 是一个二结构运算符,所以基本上...name && { name } 表示如果名称存在,则将二结构 { name } 添加到基础对象中,以进行操作更清楚一点,假设我们需要在对象中添加等于request.body.name 的属性名称,前提是request.body.name 存在:{ ...request.body.name && { name: request.body.name } }

    【讨论】:

    • 我不明白 ...name && { name } 是做什么的?你能解释一下吗? const update = {...request.body.name && { name },...request.body.surname && { surname},} 给我错误
    • Filter 我解决了过滤“对象”的问题,但如果你能给我一些主题,我也愿意学习你的方法。
    • && 运算符如果表达式的第一部分为真,则返回表达式的右部分,... 是二结构运算符,所以基本上...name && { name } 表示如果名称存在,则将二结构 { name } 添加到基础对象,为了让事情更清楚,假设我们需要添加属性name 等于prop.name 到对象只有prop.name 存在:{ ...prop.name && { name: prop.name } }
    猜你喜欢
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 2013-12-17
    • 2018-05-16
    相关资源
    最近更新 更多