首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >findByIdAndUpdate未将新字段添加到数据库中

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

Stack Overflow用户
提问于 2016-12-02 04:58:46
回答 2查看 997关注 0票数 0

我在Mongoose中的模型有大约20-30个属性,但是我还在开发中,目前只使用了大约5个属性。有一个可以编辑现有信息的编辑页面,但它不会“插入”模型中已有的属性之一。我猜findByIdAndUpdate只改变现有的值,关于Mongoose有哪些其他方法,哪里有很好的指南,并且实际上很好地解释了它们!

这是我的路线:

代码语言:javascript
复制
    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);
        }

    })
    });
EN

回答 2

Stack Overflow用户

发布于 2016-12-02 05:10:12

例如,我可以提出以下建议:

代码语言:javascript
复制
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)
        })
})

这段代码通过一些fieldUser集合中找到一个用户文档,然后保存req.body.name (来自带有name="name"属性的表单输入),并使用save()将其保存到MongoDB

此外:

HTML表单

代码语言:javascript
复制
<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并将其作为中间件启用,如下所示

代码语言:javascript
复制
var bodyParser = require('body-parser')
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
票数 1
EN

Stack Overflow用户

发布于 2016-12-02 05:24:50

您需要在mongoose命令中使用$set操作符。

试试这个:

代码语言:javascript
复制
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将根据需要创建嵌入文档,以完成字段的虚线路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40920262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档