sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongoose:CastError:Cast to ObjectId falló para el valor [object Object] en la ruta _id

Respuesta corta:usa mongoose.Types.ObjectId .

Mongoose (pero no Mongo) puede aceptar Id. de objetos como cadenas y "transmitirlos" correctamente para usted, así que solo use:

MyClass.findById(req.params.id)

Sin embargo, la advertencia es si req.params.id no es un formato válido para una cadena de ID de mongo, eso arrojará una excepción que debe capturar.

Entonces, lo más confuso que hay que entender es que mongoose.SchemaTypes tiene cosas que solo usas cuando defines esquemas mongoose, y mongoose.Types tiene las cosas que usa al crear objetos de datos que desea almacenar en la base de datos o consultar objetos. Entonces mongoose.Types.ObjectId("51bb793aca2ab77a3200000d") funciona, le dará un objeto que puede almacenar en la base de datos o usar en consultas, y lanzará una excepción si se le da una cadena de identificación no válida.

findOne toma un objeto de consulta y pasa una sola instancia de modelo a la devolución de llamada. Y findById es literalmente un envoltorio de findOne({_id: id}) (ver código fuente aquí). Solo find toma un objeto de consulta y pasa una matriz de instancias de modelos coincidentes a la devolución de llamada.

Ve despacio. Es confuso, pero puedo garantizarle que se está confundiendo y que no encuentra errores en la mangosta en este punto. Es una biblioteca bastante madura, pero se necesita algo de tiempo para dominarla.

La otra cosa sospechosa que veo en tu fragmento es no usar new al instanciar ChildClass . Más allá de eso, deberá publicar su código de esquema para que podamos ayudarlo a rastrear cualquier CastErrors que quede.