2017-07-13 18 views
0

以下のコードでMongoDB文書を更新しようとしています。MongoDB FindByIdAndUpdateが私にエラーを引き起こすのはなぜですか?

error= MongoError: After applying the update to the document {_id: ObjectId('596684d72084af52d51b4574') , ...}, the (immutable) field '_id' was found to have been altered to _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

もちろん、 '' submission' "では、' new'インスタンスに異なる '_id'値が設定されています。サーバにオブジェクト全体を投げるのではなく、プロパティを['$ set'](https://docs.mongodb.com/manual/reference/operator/update/set/) –

答えて

1

は、新しい文書を作成している:

var submission = new Submission() 

マングースは、その文書の_idを生成します。

次に、あなたはおそらく既存の文書から、別の_idreq.body.sub_submissionId)とfindByIdAndUpdateを呼び出します。

つまり、_idが異なる新しい文書で既存の文書を更新しようとしています。これは、MongoDBがエラーを返す理由です(_idの値を更新/変更できないためです)。データベース)。

代わりに、あなたが更新したいフィールドを持つオブジェクトを渡す必要があります(暗黙的に)データベース内の既存の文書のちょうどそれらのフィールドを更新する$setを呼び出します

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, ...) 

を。

+0

で更新することだけを学ぶべきです。それがソートされています。 – Patrick

関連する問題