Risposta breve:usa mongoose.Types.ObjectId .
Mongoose (ma non mongo) può accettare gli ID oggetto come stringhe e "trasmetterli" correttamente per te, quindi usa:
MyClass.findById(req.params.id)
Tuttavia, l'avvertenza è se req.params.id
non è un formato valido per una stringa ID mongo, che genererà un'eccezione che devi catturare.
Quindi la cosa confusa principale da capire è che mongoose.SchemaTypes
ha elementi che usi solo quando definisci schemi mongoose e mongoose.Types
ha le cose che usi quando crei oggetti di dati che vuoi archiviare nel database o oggetti di query. Quindi mongoose.Types.ObjectId("51bb793aca2ab77a3200000d")
funziona, ti darà un oggetto che puoi archiviare nel database o utilizzare nelle query e genererà un'eccezione se viene fornita una stringa ID non valida.
findOne
prende un oggetto query e passa una singola istanza del modello al callback. E findById
è letteralmente un wrapper di findOne({_id: id})
(vedi codice sorgente qui). Basta find
prende un oggetto query e passa un array di istanze del modello corrispondenti al callback.
Vai piano. È fonte di confusione, ma posso garantirti che ti stai confondendo e a questo punto non stai colpendo bug nella mangusta. È una libreria piuttosto matura, ma ci vuole del tempo per prenderci la mano.
L'altra cosa sospetta che vedo nel tuo snippet non è l'utilizzo di new
quando si crea un'istanza di ChildClass
. Oltre a ciò, dovrai pubblicare il codice dello schema per consentirci di aiutarti a eliminare eventuali CastError rimasti.