2017-04-24 4 views
0

Ich brauche etwas Hilfe, um einige Dinge zu klären.Mongoose - Modle.update() aktualisiert falsches Dokument - Cast Error

Ich habe ein Modell:

var Event = new Schema({ 
    event_code: String 
, segments: [Segment] 
}); 

Die Schaffung neuer Dokumente arbeiten sehr gut wie perfekt. Wenn es darum ging, bestimmte Dokumente zu aktualisieren, stieß ich auf einige Probleme.

Als ich diesen (Code unten) tun: = es aktualisiert nur das erste Dokument, auch wenn die ID nicht

function edit_event (id, new_name, callback) { 
    Event.update(id, {$set:{event_code: new_name}}, function(err, doc) { 
    if (err) throw err; 
    callback(); 
    }); 
} 

überein Wenn ich diesen (Code unten) tun: = it gibt mir einen Fehler (siehe unten)

function edit_event (id, new_name, callback) { 
    Event.findByIdAndUpdate(id, {$set:{event_code: new_name}}, function(err, doc) { 
    if (err) throw err; 
    callback(); 
    }); 
} 

Fehler beim findByIdAndUpdate mit:Cast to ObjectId failed for value ""58fdbde31bff83141b376508"" at path "_id" for model "Event"

Bitte, ich bin verzweifelt:! :/

UPDATE

ich, dass die ID herausgefunden, dass ich mit „“ um es zu bekommen gespeichert passieren bin versucht, so, wenn ich ID es setzt ein zusätzliches Paar mit passender für Dokument suchen "" um es so endet es wie oben "" id ""

UPDATE 2

Wenn ich alle meine Dokumente bin Listing, gibt sie:

{ _id: 58fdbde31bff83141b376508, 

event_code: 'TestABC', 

__v: 0, 

segments: [] } 

Dann, wenn ich die ID in einem HTML-Formular speichern, fügt es zusätzliche Paar von "" um es herum ... das ist nicht der Fall mit event_code. Warum das ?

+1

prüfen, ob Sie mit der rechten Paramter für „id“, wenn Sie Funktion edit_event sind vorbei fordern, sollte es String sein. –

+1

Wenn Sie mit find() arbeiten, sollten Sie den Parameter als {_id: id} ... id angeben. Sie müssen den Schlüssel angeben, für den Sie eine Übereinstimmung wünschen. –

+0

Ich übergebe die ID als String. console.log (id); im obigen Beispiel gibt mir 58fdbde31bff83141b376508 ... aber ich habe auch versucht zu '{_id: id}' = was zu dem gleichen Fehler –

Antwort

1

Sieht aus, als ob Sie nicht benötigte JSON.stringify durchgeführt und deshalb erhalten Sie Angebote rund um die id. Der Aufruf JSON.parse sollte das Problem lösen:

Event.findByIdAndUpdate(JSON.parse(id), {$set:{event_code: new_name}}, ...

+0

Ich denke, das ist es! ... wie endete mit "" um die ID in erster Linie ... Ich muss darauf achten. –

+0

Danke, dass du mich in die richtige Richtung gelenkt hast. Ich habe versucht, die ID falsch in das HTML-Formular zu schreiben ... was dazu führte, dass zwei Paar "" drum herum gelegt wurden .... ich bin so dumm. .. –

Verwandte Themen