仅将表单提供的字段编辑(更新)到mongoose子文档中



我想用我在表单中填写的任何字段更新我的mongoose子文档,它都可以正常工作,但我面临的问题是,如果任何字段为空,然后我提交,我希望它只用表单提供的字段更新子文档网,没有提供的字段应该保持以前的状态。目前它正在删除更新后子文档中表单未提供的字段

这是我目前使用的更新fn

List.updateOne(
{"questionSet._id": questId},
{
$set: {
"questionSet.$": req.body
}
},
{new: true, useFindAndModify: false},
(e)=>{
if(e){
console.log(e);
res.redirect("/admin-edit-quest")
} else {
res.redirect("/admin-edit-quest")
}
}
)

这是我的猫鼬型号的例子

list: { "_id" : ObjectId("60f2cc07275bbb30d8cb268e"), 
"listName" : "dsa", 
"aboutList" : "dsa queestions",
questionSet" : [ { "solved" : false, 
"_id" : ObjectId("60f2cc12275bbb30d8cb2695"), 
"topic" : "array", 
"name" : "array is best", 
"url" : "www.arr.com", 
"listname" : "dsa", 
"__v" : 0 }, 
{ "solved" : false,  
"_id" : ObjectId("60f2cc1b275bbb30d8cb269d"), 
"topic" : "linked list",
"name" : "reverse list", 
"url" : "www.list.com",
"listname" : "dsa",
"__v" : 0 } 
], 
"__v" : 2 
}

需要从req.body:中删除具有空值的密钥

pruned_body = {}
body = JSON.parse(reg.body)
Object.keys(body).forEach(function (key) { 
if (body[key]) {
pruned_body[key] = body[key]
}})

然后在$set中使用pruned_body

最新更新