为什么MongoDB FindByIdAndUpdate给我一个错误?

时间:2017-07-13 08:58:12

标签: node.js mongodb mongoose

我正在尝试使用以下代码更新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{

1 个答案:

答案 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, ...) 来更新数据库中现有文档的那些字段。