Ich bin neu bei node.js, daher habe ich das Gefühl, dass dies etwas Dummes sein wird, das ich übersehen habe, aber ich konnte keine Antwort finden, die mein Problem behebt. Ich versuche, einen Pfad zu erstellen, der ein neues untergeordnetes Objekt erstellt, es dem Array der untergeordneten Objekte des übergeordneten Objekts hinzufügt und das untergeordnete Objekt an den Anforderer zurückgibt. Das Problem, auf das ich stoße, ist, dass der Knoten abstürzt, wenn ich die Zeichenfolgen-ID an findById übergebe
TypeError: Object {} hat keine Methode 'cast'
Wenn ich stattdessen versuche, eine ObjectId zu übergeben, erhalte ich
CastError: Die Umwandlung in ObjectId ist für den Wert "[Objektobjekt]" im Pfad "_id" fehlgeschlagen.
Hier ist eine grobe Darstellung meines Codes:
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 mit dem Pfad "/ myClass / 51c35e5ced18cb901d000001 / childClass / create" ausführe, ist dies die Ausgabe des Codes:
Fehler: CastError: Die Umwandlung in ObjectId für den Wert "[Objekt Objekt]" im Pfad "_id" {"Pfad": "51c35e5ced18cb901d000001", "Instanz": "Objekt-ID", "Validatoren": [], "Setter": [ ], "getters": [], "_ index": null}
Ich habe versucht, findOne zu verwenden und stattdessen {_id: id} zu übergeben, aber dies scheint genau das zu sein, was findById tut. Ich habe die verschiedenen Klassen für ObjectId ausprobiert, die auf anderen Websites aufgeführt sind. Ich habe versucht, ObjectId () wie eine Funktion anstelle eines Konstruktors aufzurufen, und das gibt undefiniert zurück. An diesem Punkt gehen mir die Ideen aus und es scheint nicht, dass es hilfreich ist, nach einer Antwort zu googeln. Irgendwelche Ideen, was ich falsch mache?
Wie gesagt, ich bin neu in Node / Mongo / Mongoose / Express. Wenn es also einen besseren Weg gibt, mein Ziel zu erreichen, lassen Sie es mich bitte wissen. Ich freue mich über jedes Feedback.
BEARBEITEN:
Nach der Problemumgehung von Peter Lyons habe ich einen weiteren Fehler gegoogelt, auf den ich gestoßen bin, und findByIdAndUpdate gefunden, das wie erwartet funktioniert und genau das tut, was ich mir erhofft hatte. Ich bin mir immer noch nicht sicher, warum findById und findOne mir solche Probleme bereiteten, und ich bin gespannt (möglicherweise muss ein Fehlerbericht eingereicht werden), daher lasse ich dies offen, falls jemand anderes eine Antwort hat.
findOne
mit einem einzigen aufgerufenObjectId
,findOne
erwarten jedoch ein reguläres JS-Objekt mit Schlüssel- / Wertbedingungen.