Mungo: CastError: Cast zu ObjectId fehlgeschlagen für Wert "[Objekt Objekt]" im Pfad "_id"

Ich bin neu node.js so habe ich das Gefühl, dass es etwas albern, dass ich das übersehen habe, aber ich habe nicht in der Lage, eine Antwort zu finden, behebt mein problem. Was ich versuche zu tun ist, erstellen Sie einen Pfad, erstellen Sie ein neues child-Objekt, fügen Sie die übergeordnete Reihe von Kindern, dann wieder das Kind-Objekt an den Antragsteller. Das problem, das ich laufen in ist, dass wenn ich übergeben Sie die string-id in findById, Knoten stürzt ab mit

TypeError: Object {} hat keine Methode "cast"

Wenn ich versuche, Sie zu übergeben in einem ObjectId-stattdessen bekomme ich

CastError: Cast ObjectId fehlgeschlagen für den Wert "[object object]" path "_id"

Hier ist eine grobe Skizze von meinem code:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId; //Have also tried Schema.Types.ObjectId, mongoose.ObjectId

mongoose.connect('mongodb://user:password@server:port/database');

app.get('/myClass/:Id/childClass/create', function(request, result) {
  var id = new ObjectId(request.params.Id);
  MyClass.findById(id).exec( function(err, myClass) {
    if (err || !myClass) { result.send("error: " + err + "<br>" + JSON.stringify(id) || ("object '" + request.params.Id + "' not found: " + id)); return; }
    var child = ChildClass();
    myClass.Children.addToSet(child);
    myClass.save();
    result.send(child);
  });
});

Wenn ich diesen code ausführen mit dem Pfad "/myClass/51c35e5ced18cb901d000001/childClass/erstellen", dies ist die Ausgabe des Codes:

Fehler: CastError: Cast ObjectId fehlgeschlagen für den Wert "[object object]" path "_id"
{"path":"51c35e5ced18cb901d000001","instance":"ObjectID","validators":[],"setters":[],"getters":[],"_index":null}

Ich habe versucht, mit findOne und übergeben {_id:id} anstelle, aber das scheint genau das, was findById tut. Ich habe versucht, die verschiedenen Klassen, die für die ObjectId, die ich gesehen habe auf anderen Seiten aufgelistet. Ich habe versucht, Sie anzurufen, ObjectId() wie eine Funktion anstelle von einem Konstruktor auf und gibt Sie undefined zurück. An diesem Punkt, ich bin mir langsam die Ideen aus und es scheint nicht, dass Sie googeln für eine Antwort ist zu helfen. Irgendwelche Ideen auf, was ich falsch mache?

Auch, wie ich schon sagte, ich bin der neue Knoten/Mongo/Mungo/Express, so dass, wenn es einen besseren Weg gibt, um zu erreichen mein Ziel, lassen Sie es mich bitte wissen. Ich freue mich über feedback.

EDIT:

Nach dem workaround von Peter Lyons, googelte ich eine andere Fehlermeldung, die ich lief hinein und fand findByIdAndUpdate, die wie erwartet funktioniert und tut genau das, was ich hoffte, zu tun. Ich bin mir immer noch nicht sicher, warum findById und findOne Gaben mir solche Fragen, und ich bin neugierig, zu wissen, (vielleicht ein bug-report muss eingereicht werden), so lasse ich das offen für den Fall jemand hat eine Antwort.

InformationsquelleAutor der Frage jmblackmer | 2013-06-20

Schreibe einen Kommentar