首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决MongoDB4.0中“model.findByIdAndUpdate”无法更新文档的问题?

如何解决MongoDB4.0中“model.findByIdAndUpdate”无法更新文档的问题?
EN

Stack Overflow用户
提问于 2019-07-28 11:04:05
回答 1查看 194关注 0票数 1

我正在学习expressjs,在终端输入以下命令后,我正在尝试通过id更新mongodb数据库中的文档,并使用PUT指定路由:

代码语言:javascript
复制
curl -X PUT --data "name =James&age = 20&nationality=American"http://localhost:3000/people/5d3ba2a863ba682d70242131

它打印出文档,但没有更新任何内容

我已经根据默认设置({new:false})使用了推荐的{new:true},但是没有任何变化。不指定任何路由,例如

代码语言:javascript
复制
Person.findOneAndUpdate({name:'deean'},{age:34},function(err,response){
   console.log(response);
}); 

上面的代码可以工作,但下面的代码不能:

代码语言:javascript
复制
app.put('/people/:id', function(req, res){
   Person.findByIdAndUpdate(req.params.id, req.body, {new: true} ,function(err, response){
      if(err) 
       res.json({message:"Error in updating person with id" + req.params.id});
      res.json(response);
      });
});
app.listen(3000);

我尝试更改的原始文档是

代码语言:javascript
复制
{ _id: 5d3ba2a863ba682d70242131,
name: 'deean ajashi',
age: 34,
nationality: 'indian',
__v: 0 } ]

这是我在终端上得到的输出

代码语言:javascript
复制
    C:\Users\Diola>curl -X PUT --data "name = James&age = 20&nationality = American" http://localhost:3000/people/5d3ba2a863ba682d70242131

{"_id":"5d3ba2a863ba682d70242131","name":"dean ajashi","age":34,"nationality":"indian","__v":0}
C:\Users\Diola>

我使用的格式来自Tutorialspointclick to check out page on Tutorialspoint

编辑:我想这就是你所说的模型和路由器文件,尽管我不确定

代码语言:javascript
复制
var express = require('express');
var multer = require("multer");
var upload = multer(); 
var app = express();
app.set('view engine', 'pug');
app.set('views', './views');
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 

app.use(upload.array()); 
app.use(express.static('public')); 
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/mydb', { useNewUrlParser: true }); 
var personSchema = mongoose.Schema({
   name: String,
   age: Number,
   nationality: String 
});
var Person = mongoose.model("Person", personSchema);
app.get('/person', function(req, res){
   res.render('person'); 
});
app.post('/person', function(req, res){ 
   var personInfo = req.body; 
   console.log('recived your request'); 
   console.log(req.body);
   
   
   if(!personInfo.name || !personInfo.age || !personInfo.nationality){ 
      res.render('show_message', {
         message: "Sorry, you provided worng info", type: "error"});
   } else {
      var newPerson = new Person({  
         name: personInfo.name,
         age: personInfo.age,
         nationality: personInfo.nationality
      });

		newPerson.save(function(err, Person){ 
         if(err)
            res.render('show_message', {message: "Database error", type: "error"});
         else
            res.render('show_message', {
               message: "New person added", type: "success", person: personInfo});
      });
   }
});

EN

回答 1

Stack Overflow用户

发布于 2019-07-28 11:28:23

当你通过{new: true}时,它会返回更新的文档(Vs)旧文档,如果是假的,它与更新操作无关,你能给我们你的模型和路由器文件吗,同时-尝试下面的代码并检查你是否能够通过打印req.params.idreq.body获得请求:

代码语言:javascript
复制
app.put('/people/:id', function(req, res){
   Person.findByIdAndUpdate(req.params.id, {$set:req.body}, {new: true} ,function(err, response){
       if(err) res.json({message: "Error in deleting record id " + req.params.id});
       else res.json(response);
      });
});
app.listen(3000);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57237628

复制
相关文章

相似问题

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