【问题标题】:findByIdAndUpdate doesnt update anythingfindByIdAndUpdate 不更新任何东西
【发布时间】:2019-06-14 00:11:45
【问题描述】:

我正在关注一个教程,但它似乎很旧,看起来事情已经改变了,我有一个编辑页面试图编辑 mongodb 中的现有数据,但它就是不想工作。

这是教程中的人所做的:

app.put("/blogs/:id",function(req,res){
Blog.findByIdAndUpdate(req.params.id,req.body.blog,function(err,updatedBlog){
if (err) {
  res.redirect("/blogs");
}else {
  res.redirect("/blogs/" + req.params.id);
}
  });
});

从那时起,我尝试使用 findOneAndUpdate(),但我似乎无法解决这个问题,我尝试将 .id 替换为 ._id,如下所示:

app.put("/blogs/:id",function(req,res){
   Blog.findByIdAndUpdate(req.params._id,req.body,{new:true},function(err,updatedBlog){
if(err){
  console.log(err);
}else{
  console.log("Blog updated");
  res.redirect("/blogs/"+req.params._id);
}
  });
});

它会转到 else 语句,因为我得到了 console.log 但它仍然没有更新任何东西

【问题讨论】:

  • 而不是 {new:true} 你可以试试 {upsert:true} 吗?您还可以发布 req.body 包含的内容吗?
  • 我添加了 console.log(req.body);到 else ,它似乎正在获取我在控制台日志返回的页面输入中编辑的信息 { blog: { title: 'Test Blog1111', image: 'farm8.staticflickr.com/7250/7775397718_c676fbeb4b.jpg', body: 'Hello this is a博客文章! } } 这是我编辑的,但在我去刷新页面后它恢复正常
  • 在我每次转到索引页面时都将 new 更改为 upsert 后,我​​得到“无法读取未定义的属性 'substring'”
  • 你能把代码贴在你实际访问数据的地方吗,你在那里使用子字符串关键字
  • @saikatchakrabortty

    索引页

    " alt="博客图片">

    ...

    阅读更多

标签: mongodb express mongoose ejs


【解决方案1】:

我认为您的更新查询格式不正确。

您的查询应该类似于this

    Blog.findByIdAndUpdate(req.params.id, {$set: {blog: req.body.blog}}, function(err, updatedData){
        if(err){console.log(err);}
        else{ console.log('blog  updated');
         // do other stuff.....
        }

})

【讨论】:

  • 我什至无法对此进行测试,因为我将 {new:true} 更改为 {upsert:true} 并且每次我进入索引页面时都会立即收到错误 `7| " alt="博客图片"> 8| >> 9|

    ...

    10| 阅读更多 11| 12|无法读取未定义 `
    的属性“子字符串”
  • 您的对象数组包含空值或空白值,即 blogs[i].body 所以首先您应该不使用 substring() 方法打印或使用此代码
  • 所以我删除了子字符串部分,现在它渲染了索引页面,当然它渲染了整个 blog.body 但我仍然收到错误 ` { CastError: Cast to ObjectId failed for value "5c367bd3c1cbd03708d560f1 " at模型“博客”的路径“_id”`
【解决方案2】:

在参数 req.body 的末尾,您忘记添加博客,所以它应该是

Blog.findByIdAndUpdate(req.params.id,req.body.blog,function(error, updatedBlog)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多