Kort svar:använd mongoose.Types.ObjectId .
Mongoose (men inte mongo) kan acceptera objekt-ID som strängar och "casta" dem ordentligt åt dig, så använd bara:
MyClass.findById(req.params.id)
Förbehållet är dock om req.params.id
är inte ett giltigt format för en mongo-ID-sträng, som kommer att skapa ett undantag som du måste fånga.
Så det mest förvirrande att förstå är att mongoose.SchemaTypes
har saker du bara använder när du definierar mongoose-scheman och mongoose.Types
har de saker du använder när du skapar dataobjekt som du vill lagra i databasen eller frågeobjekt. Så mongoose.Types.ObjectId("51bb793aca2ab77a3200000d")
fungerar, ger dig ett objekt som du kan lagra i databasen eller använda i frågor, och kommer att skapa ett undantag om du får en ogiltig ID-sträng.
findOne
tar ett frågeobjekt och skickar en enskild modellinstans till återuppringningen. Och findById
är bokstavligen ett omslag av findOne({_id: id})
(se källkoden här). Bara find
tar ett frågeobjekt och skickar en array av matchande modellinstanser till återuppringningen.
Bara gå långsamt. Det är förvirrande men jag kan garantera dig att du blir förvirrad och inte träffar buggar i mungo vid det här laget. Det är ett ganska moget bibliotek, men det tar lite tid att få kläm på det.
Det andra misstänkta jag ser i ditt kodavsnitt är att inte använda new
när du instansierar ChildClass
. Utöver det måste du lägga upp din schemakod för att vi ska kunna hjälpa dig att hitta kvar CastErrors.