findByIdAndUpdate未将新字段添加到数据库中

时间:2016-12-01 20:58:46

标签: node.js mongodb mongoose

我在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);
        }

    })
    });

2 个答案:

答案 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将根据需要创建嵌入文档以实现   通往该领域的虚线路径。