2017-07-13 3 views
0

Ich versuche ein MongoDB-Dokument mit dem folgenden Code zu aktualisieren. Wenn ich es laufen lasse, erhalte ich folgende Fehlermeldung:Warum gibt mir MongoDB FindByIdAndUpdate einen Fehler?

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')

ich nicht für das Leben von mir sehen, wo ich das _id Feld bin zu ändern.

Kann jemand sehen, was ich falsch mache?

Danke.

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

Sie ändern es natürlich in "' submission' ", wobei die' neue' Instanz einen anderen '_id' Wert hat. Anstatt das ganze Objekt auf den Server zu werfen, sollten Sie lernen, die Eigenschaften einfach über ['$ set'] zu aktualisieren (https://docs.mongodb.com/manual/reference/operator/update/set/) –

Antwort

1

Sie erstellen ein neues Dokument:

var submission = new Submission() 

Mongoose wird eine _id für dieses Dokument erzeugen.

Als nächstes rufen Sie findByIdAndUpdate mit einem anderen _id (req.body.sub_submissionId), vermutlich von einem bestehenden Dokument.

Mit anderen Worten, Sie versuchen, ein vorhandenes Dokument mit einem neuen Dokument zu aktualisieren, das eine andere _id hat, weshalb MongoDB den Fehler zurückgibt (weil Sie _id Werte der Dokumente nicht bereits aktualisieren können Datenbank).

Stattdessen sollten Sie ein Objekt mit den Feldern übergeben Sie aktualisieren möchten:

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

Das wird (implizit) $set rufen Sie einfach die Felder des vorhandenen Dokuments in der Datenbank zu aktualisieren.

+0

Danke. Das hat es sortiert. – Patrick

Verwandte Themen