【发布时间】:2020-08-12 14:40:17
【问题描述】:
我正在尝试通过 HTML 表单使用 findByIdAndUpdate 更新我的数据库,该表单适用于除嵌套数据之外的所有数据(ePIMS、codeVersion 和 region 都可以正常更新)。当我执行console.log(req.body.environment.instance) 时,它会输出我输入的数据,就像它正确通过一样,但由于某种原因,mongoDB 没有更新信息。谁能弄清楚我做错了什么?
猫鼬模式:
var environmentSchema = new mongoose.Schema({
ePIMS: String,
codeVersion: String,
region: String,
/*instance and testEnv don't seem to update in the database*/
HCHC: {
instance: String,
testEnv: String
}
});
我用来更新的表格:
<form action="/environments/<%= environment._id %>?_method=PUT" method="POST">
<input class="form-control" type="text" name="environment[ePIMS]" placeholder="ePIMS" value="<%= environment.ePIMS %>" />
<input class="form-control" type="text" name="environment[region]" placeholder="Region" value="<%= environment.region %>" />
<input class="form-control" type="text" name="environment[instance]" placeholder="HCHC Instance" value="<%= environment.instance %>" />
<input class="form-control" type="text" name="environment[testEnv]" placeholder="Test Environment" value="<%= environment.testEnv %>" />
<button class="btn btn-primary">Submit</button>
</form>
编辑和更新路线:
//Edit environment route
router.get("/environments/:id/edit", function(req, res){
Environment.findById(req.params.id, function(err, foundEnvironment){
if(err){
res.redirect("/");
} else {
res.render("edit", {environment: foundEnvironment});
}
});
});
//Update environment route
router.put("/environments/:id", function(req, res){
Environment.findByIdAndUpdate(req.params.id, req.body.environment, function(err, updatedEnvironment){
if (err) {
res.redirect("/environments");
} else {
res.redirect("/environments");
//console.log(req.body.environment.instance)
}
});
});
更新:解决方案 感谢 Nayan 的帮助!
我像这样更改了更新路线:
//Update environment route
router.put("/environments/:id", function(req, res){
var data = {
HCHC : {
instance: req.body.instance,
testEnv: req.body.testEnv
}
}
Environment.findByIdAndUpdate(req.params.id, {$set: data}, function(err, updatedEnvironment){
if (err) {
res.redirect("/environments");
} else {
res.redirect("/environments");
}
});
});
【问题讨论】:
-
req.params.id以字符串形式出现,而数据库中的_id可能是ObjectId。你可以试试:mongoose.Types.ObjectId(req.params.id)吗? -
@mickl 你的意思是 console.log 还是尝试用它代替
req.params.id? -
尝试替换
req.params.id将值转换为ObjectId -
@mickl 嗯,这似乎没有任何改变:/
标签: javascript html node.js mongodb mongoose