我想更新数据库中的一些键和值。我已经填写了一些字段,例如firstname
,lastname
,现在我想用个人资料图片,联系电话等更新这些文档。
当我使用update
传递这些值时,已经设置的字段将变为空,即firstname
和lastname
变为空。我希望firstname
和lastname
像以前一样设置,如果用户不想更新这些值而只更新文档中的更高值。
如果用户想同时更新firstname
和lastname
以及个人资料照片,那么我也希望对其进行更新。
我使用了mongo的更新方法,并请求新值进行更新。我通过邮递员传递了新值,但没有传递数据库中已经存在的旧值。更新后,对于其值显示为空。
router.put('/:id/edit',upload.array("images",2),function(req,res,next){
shopid= req.params.id,
console.log(req.body);
User.find({"_id":shopid}).update({
firstname: req.body.firstname,
lastname: req.body.lastname,
contact_no : req.body.contact_no,
images:{
shop_logo:req.files[0].path,
shop_picture: req.files[1].path,
},
shopname:req.body.shopname,
updated_at: Date.now(),
},function(err,data){
if(err){
res.json(err);
}else{
res.json(data);
}
});
});
结果:
_id: "5ce29ba3e0c2d825d9e5a39f"
firstname: null
lastname: "Gyaawali"
geo: Array
shopkeeper: true
created_at: 2019-05-20T12:20:51.407+00:00
updated_at: 2019-05-23T15:00:04.442+00:00
__v: 0
contact_no: 9837949483
pan_no:"55343fASDE"
images: Object
shop_logo: "public/shop_logo/images-1558623604437-flag-map-of-nepal-logo-C43E9EAFA..."
shop_picture: "public/shop_logo/images-1558623604439-flat-sale-background_23-21477500..."
shopname: "Hello.shop"
我不希望firstname
字段被更改。但是它更改为null。
答案 0 :(得分:2)
由于执行了该查询:您还要更新这些字段。即使您没有向其发送任何值,也要使用 null 更新这些字段(例如, req.body.firstname 为空,因为名字不在帖子中身体)。如果您不想更新它们,则不应在查询中包括这些字段。 如果您不想更新名字和姓氏,但其他字段是,则查询应该是这样的:
User.find({"_id":shopid}).update({
contact_no : req.body.contact_no,
images:{
shop_logo:req.files[0].path,
shop_picture: req.files[1].path,
},
shopname:req.body.shopname,
updated_at: Date.now(),
},function(err,data){
if(err){
res.json(err);
}else{
res.json(data);
}
});
希望这个回答您的问题!
答案 1 :(得分:1)
只要预先检查密钥是否存在于req.body中,然后仅对其进行更新即可。如下所示:
router.put("/:id/edit", upload.array("images", 2), function (req, res, next) {
let shopid = req.params.id;
let {
firstname,
lastname,
contact_no,
shopname
} = req.body;
let updateObj = {};
firstname && (updateObj.firstname = firstname);
lastname && (updateObj.lastname = lastname);
contact_no && (updateObj.contact_no = contact_no);
shopname && (updateObj.shopname = shopname);
updateObj.updated_at = Date.now();
updateObj.images = {
shop_logo: req.files[0].path,
shop_picture: req.files[1].path
};
User.find({
_id: shopid
}).update(
updateObj,
function (err, data) {
if (err) {
res.json(err);
} else {
res.json(data);
}
}
);
});