我正在尝试使用以下代码更新MongoDB文档。当我运行它时,我收到以下错误:
error = MongoError:将更新应用于文档{_id: ObjectId('596684d72084af52d51b4574'),...},(不可变)字段 发现'_id'已被更改为_id: 的ObjectId( '596734cd9a40f6561bcd0c2a')
我无法看到我正在改变_id领域的生活。
谁能看到我做错了什么?
感谢。
exports.updateSubmission_post = function(req, res) {
var submission = new Submission();
submission.publication = req.body.sub_publication;
submission.submission_date = req.body.sub_submission_date;
submission.response_date = req.body.sub_response_date;
submission.response = req.body.sub_response;
Submission.findByIdAndUpdate(req.body.sub_submissionId, submission, {}, function (err, submission) {
if (err) {
console.log('error= ' + err);
return err;
}else{
答案 0 :(得分:1)
您正在创建新文档:
var submission = new Submission()
Mongoose会为该文档生成_id
。
接下来,您使用其他findByIdAndUpdate
(_id
)致电req.body.sub_submissionId
,可能来自现有文档。
换句话说,您尝试使用具有不同_id
的新文档更新现有文档,这就是MongoDB返回错误的原因(因为您无法更新/更改{{1}已存在于数据库中的文档的值。)
相反,您应该传递一个包含您要更新的字段的对象:
_id
这将(隐式地)调用var submission = {};
submission.publication = req.body.sub_publication;
submission.submission_date = req.body.sub_submission_date;
submission.response_date = req.body.sub_response_date;
submission.response = req.body.sub_response;
Submission.findByIdAndUpdate(req.body.sub_submissionId, submission, ...)
来更新数据库中现有文档的那些字段。