MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose:CastError:Umwandlung in ObjectId für Wert [object Object] bei Pfad _id fehlgeschlagen

Kurze Antwort:Verwenden Sie mongoose.Types.ObjectId .

Mongoose (aber nicht Mongo) kann Objekt-IDs als Strings akzeptieren und sie richtig für Sie „umwandeln“, also verwenden Sie einfach:

MyClass.findById(req.params.id)

Der Vorbehalt ist jedoch, wenn req.params.id ist kein gültiges Format für eine Mongo-ID-Zeichenfolge, die eine Ausnahme auslöst, die Sie abfangen müssen.

Das Verwirrendste ist also, dass mongoose.SchemaTypes enthält Dinge, die Sie nur beim Definieren von Mongoose-Schemas verwenden, und mongoose.Types hat das Zeug, das Sie verwenden, wenn Sie Datenobjekte erstellen, die Sie in der Datenbank speichern oder Objekte abfragen möchten. Also mongoose.Types.ObjectId("51bb793aca2ab77a3200000d") funktioniert, gibt Ihnen ein Objekt, das Sie in der Datenbank speichern oder in Abfragen verwenden können, und löst eine Ausnahme aus, wenn eine ungültige ID-Zeichenfolge übergeben wird.

findOne nimmt ein Abfrageobjekt und übergibt eine einzelne Modellinstanz an den Rückruf. Und findById ist buchstäblich ein Wrapper von findOne({_id: id}) (siehe Quellcode hier). Einfach find nimmt ein Abfrageobjekt und übergibt ein Array übereinstimmender Modellinstanzen an den Rückruf.

Geh einfach langsam. Es ist verwirrend, aber ich kann Ihnen garantieren, dass Sie verwirrt sind und an dieser Stelle keine Bugs in Mungo treffen. Es ist eine ziemlich ausgereifte Bibliothek, aber es dauert einige Zeit, bis man den Dreh raus hat.

Die andere verdächtige Sache, die ich in Ihrem Snippet sehe, ist, dass new nicht verwendet wird beim Instanziieren von ChildClass . Darüber hinaus müssen Sie Ihren Schemacode posten, damit wir Ihnen helfen können, verbleibende CastErrors zu beheben.