Krátká odpověď:použijte mongoose.Types.ObjectId .
Mongoose (ale ne mongo) může přijmout ID objektů jako řetězce a správně je „obsadit“, takže stačí použít:
MyClass.findById(req.params.id)
Upozornění je však v případě req.params.id
není platný formát pro řetězec mongo ID, který vyvolá výjimku, kterou musíte zachytit.
Takže hlavní matoucí věc k pochopení je, že mongoose.SchemaTypes
obsahuje věci, které používáte pouze při definování schémat mongoose, a mongoose.Types
obsahuje věci, které používáte při vytváření datových objektů, které chcete uložit do databáze nebo objektů dotazu. Takže mongoose.Types.ObjectId("51bb793aca2ab77a3200000d")
funguje, poskytne vám objekt, který můžete uložit do databáze nebo použít v dotazech, a vyvolá výjimku, pokud zadáte neplatný řetězec ID.
findOne
vezme objekt dotazu a předá jednu instanci modelu zpětnému volání. A findById
je doslova obal findOne({_id: id})
(zdrojový kód viz zde). Stačí find
vezme objekt dotazu a předá pole odpovídajících instancí modelu zpětnému volání.
Jen pomalu. Je to matoucí, ale mohu vám zaručit, že v tomto bodě začínáte být zmatení a nenarážíte na chyby v mangustách. Je to docela vyspělá knihovna, ale nějakou dobu trvá, než se v ní dostanete.
Další podezřelá věc, kterou vidím ve vašem úryvku, není použití new
při vytváření instance ChildClass
. Kromě toho budete muset odeslat svůj kód schématu, abychom vám mohli pomoci odhalit zbývající chyby CastErrors.