Kort svar:brug mongoose.Types.ObjectId .
Mongoose (men ikke mongo) kan acceptere objekt-id'er som strenge og "caste" dem korrekt for dig, så brug bare:
MyClass.findById(req.params.id)
Advarslen er dog, hvis req.params.id
er ikke et gyldigt format for en mongo-id-streng, som vil give en undtagelse, som du skal fange.
Så den vigtigste forvirrende ting at forstå er, at mongoose.SchemaTypes
har ting, du kun bruger, når du definerer mongoose-skemaer, og mongoose.Types
har de ting, du bruger, når du opretter dataobjekter, du vil gemme i databasen eller forespørgselsobjekter. Så mongoose.Types.ObjectId("51bb793aca2ab77a3200000d")
fungerer, vil give dig et objekt, du kan gemme i databasen eller bruge i forespørgsler, og vil give en undtagelse, hvis du får en ugyldig ID-streng.
findOne
tager et forespørgselsobjekt og sender en enkelt modelforekomst til tilbagekaldet. Og findById
er bogstaveligt talt en indpakning af findOne({_id: id})
(se kildekoden her). Bare find
tager et forespørgselsobjekt og sender en række matchende modelforekomster til tilbagekaldet.
Bare gå langsomt. Det er forvirrende, men jeg kan garantere dig, at du bliver forvirret og ikke rammer insekter i mongoose på dette tidspunkt. Det er et ret modent bibliotek, men det tager lidt tid at få styr på det.
Den anden mistænkelige ting, jeg ser i dit uddrag, er ikke at bruge new
når du instansierer ChildClass
. Udover det skal du sende din skemakode, for at vi kan hjælpe dig med at opspore eventuelle CastErrors, der er tilbage.