MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongoose:CastError:Cast to ObjectId falhou para o valor [object Object] no caminho _id


Resposta curta:use mongoose.Types.ObjectId .

O Mongoose (mas não o mongo) pode aceitar Ids de objetos como strings e "lançá-los" corretamente para você, então use:
MyClass.findById(req.params.id)

No entanto, a ressalva é se req.params.id não é um formato válido para uma string de ID do mongo, que lançará uma exceção que você deve capturar.

Portanto, a principal coisa confusa a entender é que mongoose.SchemaTypes tem coisas que você só usa ao definir esquemas de mangusto e mongoose.Types tem o material que você usa ao criar objetos de dados que deseja armazenar no banco de dados ou objetos de consulta. Então mongoose.Types.ObjectId("51bb793aca2ab77a3200000d") funciona, fornecerá um objeto que você pode armazenar no banco de dados ou usar em consultas e lançará uma exceção se receber uma string de ID inválida.

findOne pega um objeto de consulta e passa uma única instância de modelo para o retorno de chamada. E findById é literalmente um wrapper de findOne({_id: id}) (veja o código fonte aqui). Basta find pega um objeto de consulta e passa uma matriz de instâncias de modelo correspondentes para o retorno de chamada.

Apenas vá devagar. É confuso, mas posso garantir que você está ficando confuso e não encontrando bugs no mangusto neste momento. É uma biblioteca bastante madura, mas leva algum tempo para pegar o jeito.

A outra coisa suspeita que vejo no seu snippet não está usando new ao instanciar ChildClass . Além disso, você precisará postar seu código de esquema para que possamos ajudá-lo a eliminar quaisquer CastErrors que permanecerem.