如何使用Node JS更新MongoDB中的文档

时间:2018-10-28 22:25:14

标签: javascript node.js mongodb mongoose

我正在尝试使用节点js更新mangodb数据库中的某些数据,但文档不会更新。我收到此日志消息{ n: 0, nModified: 0, ok: 1 } 这是我的代码:

我成功连接到数据

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/cinemas')
        .then(()=> console.log('connected to mongoDB....'))
        .catch(err => console.log('Could not connect to mongoDB because',err));

这是架构

const moviesSchema = new mongoose.Schema({
  title: String,
  acotrs:[String],
  genre: [String],
  date: {type: Date, default: Date.now},
  onCinema :Boolean
});

模型连接

const Movie = mongoose.model('Movie',movieSchema);

我可以毫无问题地搜索数据库,唯一的问题是不更新数据库的更新功能。函数如下:

async function updateMovie(id){
  const result = await Movie.update({_id: id},{
    $set:{
      title: 'New Movie',
      onCinema: false
    }
  });
  console.log(result);
}
updateMovie('5a68fdf95db93f6477053ddd'); 

我在控制台{ n: 0, nModified: 0, ok: 1 }上收到此日志,该日志告诉我没有任何更新。请帮忙。我在做什么错了?

3 个答案:

答案 0 :(得分:0)

尝试一下:

`MongoClient.connect(url, { useNewUrlParser: true }, (err, client) => { 
     let queryId = { _id: this.id }; //Get the ID of the object
     let myObj = { 
         $set: { 
           name: 'Somename' //Whatever you want to change for that ID
         }
     var db = client.db("database_name");
     db.collection("collection_name").updateOne(queryId, myObj, (err, res) => {
         if (err) {
             console.log("not Updated");
         }
         else{
            console.log("Updated");
         }
     });
}`

让我知道您是否还有其他问题。

答案 1 :(得分:0)

const result = await Movie.update({_id: id},{
    $set:{
      title: 'New Movie',
      onCinema: false
    }
  });

更新函数给出这样的输出。

{ n: 0, nModified: 0, ok: 1 }

尝试使用 findByIdAndUpdate

const result = await Movie.findByIdAndUpdate(id,{
    $set:{
      title: 'New Movie',
      onCinema: false
    }
  });

它将以 json 格式给出确切的结果。

答案 2 :(得分:-1)

您提供的ID为字符串类型,_id为ObjectId,因此添加mongoose.Types.ObjectId(id)应该可以解决此问题。

    async function updateMovie(id){
  const result = await Movie.update({_id: mongoose.Types.ObjectId(id)},{
    $set:{
      "title": 'New Movie',
      "onCinema": false
    }
  });
  console.log(result);
}
updateMovie('5a68fdf95db93f6477053ddd');