我是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);
});
正在返回控制台记录而未更新
答案 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);
});