猫鼬 findByIdAndUpdate 不起作用。 new: true 包括

Posted

技术标签:

【中文标题】猫鼬 findByIdAndUpdate 不起作用。 new: true 包括【英文标题】:Mongoose findByIdAndUpdate not working. new: true included猫鼬 findByIdAndUpdate 不起作用。 new: true 包括 【发布时间】:2020-09-05 12:12:52 【问题描述】:

我尝试编辑信息并更新它,但猫鼬 findByIdAndUpdate 不起作用。 new: true 被包括在内,但它仍然显示原始的。在数据库中,信息也没有更新。控制台显示 PUT /blogs/:id 302。

路线如下:

//edit
router.get('/blogs/:id/edit', function (req, res) 
    Blog.findById(req.params.id, function (err, blogFound) 
        if(err)
            console.log(err);
        else
            res.render("edit", blog: blogFound);
        
    );
);

//update
router.put('/blogs/:id', function (req, res) 
    Blog.findByIdAndUpdate(req.params.id, req.body.blog, new: true,function (err, blogUpdated) 
       if(err)
           console.log(err);
        else
           res.redirect('/blogs/' + req.params.id);
       
    );
);

编辑表单如下所示:

<form class="ui form" action="/blogs/<%= blog._id %>?_method=PUT" method="POST">
        <div class="field">
            <label>Title</label>
            <input type="text" name="title" value="<%= blog.title %>">
        </div>
        <div class="field">
            <label>Image</label>
            <input type="text" name="image" value="<%= blog.image %>">
        </div>
        <div class="field">
            <label>Content</label>
            <textarea name="description"><%= blog.description %></textarea>
        </div>
        <button class="ui primary button" type="submit">Submit</button>
</form>

【问题讨论】:

我也有同样的问题。如果您插入一个新文档然后更改它,就会发生这种情况。如果您先获取新文档然后对其进行更改,则更新将起作用。 【参考方案1】:

似乎req.body.blog 未定义。

你的正文中有标题、图像和描述,没有分组在blog 对象中,所以你应该写

const  title, image, description  = req.body;
Blog.findByIdAndUpdate(req.params.id,  title, image, description , 

或者像这样

【讨论】:

有效!非常感谢。我已经被困了好几个小时了。

以上是关于猫鼬 findByIdAndUpdate 不起作用。 new: true 包括的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬 findByIdAndUpdate 不起作用

Mongoose / Express findByIdAndUpdate 不起作用

猫鼬 TTL partialFilterExpression 不起作用?

猫鼬 TTL partialFilterExpression 不起作用?

猫鼬独特:真的不起作用[重复]

猫鼬填充不起作用