我在Mongoose中的模型中有大约20-30个属性,但是我正在开发中,现在只使用大约5个。有一个编辑页面可以编辑现有信息,但它不会“插入”模型中已有的某个属性。我猜findByIdAndUpdate
只改变了现有的值,哪里有一个关于Mongoose有什么其他方法的好指南,实际上很好地解释了它们!
这是我的路线:
router.put("/event/:id", isLoggedIn, function (req,res) {
Event.findByIdAndUpdate(req.params.id, req.body.editEvent, function (err, updatedEvent) {
if (err) {
console.log(err);
res.redirect("/event");
} else {
console.log("This is the updated Event");
console.log(updatedEvent);
console.log("done with updated event");
res.redirect("/event/" + req.params.id);
}
})
});
答案 0 :(得分:1)
例如,我可以建议以下内容:
router.post('/save-some-data-to-model', function(req, res, next) {
User.findOne({
field: value
}, function(err, user) {
user.name = req.body.name
user.save(function(err) {
if (err) return next(err)
})
})
此代码在User
集合中找到一个field
的一个用户文档,然后保存req.body.name
(来自带name="name"
属性的表单输入)并使用{将其保存到MongoDB {1}}
另外:
HTML表单
save()
注意:
如果您使用的是Express.js,则需要安装<form method="post" action="/save-some-data-to-model">
<div class="form-group">
<label for="name">Name: </label>
<input type="text" class="form-control" name="name">
</div>
</form>
并将其作为此类中间件启用
body-parser
答案 1 :(得分:0)
您需要在mongoose命令中使用router.put("/event/:id", isLoggedIn, function (req,res) {
Event.findByIdAndUpdate(req.params.id, {"$set": req.body.editEvent}, function (err, updatedEvent) {
if (err) {
console.log(err);
res.redirect("/event");
} else {
console.log("This is the updated Event");
console.log(updatedEvent);
console.log("done with updated event");
res.redirect("/event/" + req.params.id);
}
})
});
运算符。
试试这个:
map[string]interface{}
这应该作为参考:
https://docs.mongodb.com/manual/reference/operator/update/set/
行为
如果该字段不存在,$ set将添加一个新字段 指定的值,前提是新字段不违反类型 约束。如果为不存在的字段指定虚线路径, $ set将根据需要创建嵌入文档以实现 通往该领域的虚线路径。