我在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);
}
})
});发布于 2016-12-02 05:10:12
例如,我可以提出以下建议:
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)
})
})这段代码通过一些field在User集合中找到一个用户文档,然后保存req.body.name (来自带有name="name"属性的表单输入),并使用save()将其保存到MongoDB
此外:
HTML表单
<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>注意:
如果您使用的是Express.js,则需要安装body-parser并将其作为中间件启用,如下所示
var bodyParser = require('body-parser')
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))发布于 2016-12-02 05:24:50
您需要在mongoose命令中使用$set操作符。
试试这个:
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);
}
})
});这应该是一个有用的参考:
https://docs.mongodb.com/manual/reference/operator/update/set/
行为
如果该字段不存在,只要新字段不违反类型约束,$set将添加一个具有指定值的新字段。如果为不存在的字段指定虚线路径,$set将根据需要创建嵌入文档,以完成字段的虚线路径。
https://stackoverflow.com/questions/40920262
复制相似问题