gpt4 book ai didi

javascript - 使用 findOneAndUpdate() 时,如果没有提供值(而不是用 null 覆盖),如何保持字段原样?

转载 作者:行者123 更新时间:2023-11-30 20:53:52 25 4
gpt4 key购买 nike

用户可以选择更新一些值中的任何一个 - 然而,如果他只传入 { name: "new name"} ,则电子邮件和密码字段也会更新,但要“空”。

如何只更新 req.body 中实际提供的字段,而将其余部分保持原样?

同时指定哪些字段可以通过 POST 请求更新 - 我避免只传入 req.body,因为我想限制它。

我的代码如下:

db.User.findOneAndUpdate({_id: req.params.id}, { 
name: req.body.name,
email: req.body.emaill,
password: req.body.password
})

使用类似 name: req.body.name && req.body.name 的东西来检查值是否未定义也会被“null”覆盖。

谢谢!

最佳答案

首先准备更新对象:

let params = { 
name: req.body.name,
email: req.body.emaill,
password: req.body.password
};

for(let prop in params) if(!params[prop]) delete params[prop]; //This will not handle intentionally setting to false, empty string, null, 0, or other falsey values.

db.User.findOneAndUpdate({_id: req.params.id}, params);

或者,如果您的属性名称匹配:

let params = {};

for(let prop in req.body) if(req.body[prop]) params[prop] = req.body[prop];

db.User.findOneAndUpdate({_id: req.params.id}, params);

关于javascript - 使用 findOneAndUpdate() 时,如果没有提供值(而不是用 null 覆盖),如何保持字段原样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47877333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com