Nodejs Mongoose无法更新数据库

时间:2015-11-18 10:18:05

标签: javascript node.js mongodb mongoose

我是Nodejs和MongoDB的新手。这可能是一个简单的错误,但我似乎无法更新数据库中的值。我搜索的范围很广,但我的语法似乎是正确的。请帮帮我。

var dataConstruct = {}
dataConstruct[fieldName] = fieldValue;
updateRecordModel.find(dataConstruct , function(err, field) {
  if(err) {
    logger.error("Error deleting records. Error -" + err)
    callback(err, "Error while searching for record.Please cheack the values posted")
  }
  else {
    logger.info("JSON"+JSON.stringify(field[0].Option1));
    field[0].Option1="Max";
    logger.info("JSON"+JSON.stringify(field[0].Option1));
    if(field){
       //code to update
  }
  else{
    callback(err, "No such data present")
  }
  }

}).lean();

查找返回数据。我使用.lean()来获取javascript对象而不是文档模型对象,以便我可以修改数据。我似乎无法修改返回的数据而不使用.lean(),因为这篇文章中的问题是Why can't you modify the data returned by a Mongoose Query (ex: findById)

我试图找到数据并更新或重新保存它,我尝试了这篇文章https://scotch.io/tutorials/using-mongoosejs-in-node-js-and-mongodb-applications中提到的所有更新语法和方法(包括查找然后再保存文档),但似乎没有工作,因为我不能修改返回的数据

这是从find返回的json                { “_id”: “564c29d96bf38ba3039f4844”, “选项1”: “加里”, “选项2”: “佛瑞德”, “__ V”:0}

我需要知道如何更新此值

这是我用于findoneand update

的代码
    updateRecordModel.findOneAndUpdate({"Option1": "Gary" }, { "Option1": "Max" }, function(err,records) {
    if (err) throw err;
    console.log(records);
    });

正在返回控制台记录而未更新

2 个答案:

答案 0 :(得分:1)

您可以尝试field[0].Option1="Max";使用保存方法。 field[0].save()。我希望它有所帮助

答案 1 :(得分:1)

由于mongoose 4.0,findOneAndUpdate返回的值始终是旧文档。如果您想要返回新的文件(更新的文档),您必须在选项中传递{new: true},如in their documentation所述。

你应该得到这样的东西:

updateRecordModel.findOneAndUpdate({"Option1": "Gary" }, { "Option1": "Max" }, {new: true}, function(err,records) {
  if (err) throw err;
  console.log(records);
});