Node.js – Cast to ObjectId failed for value “” at path “_id” for model “Coach”

expressherokumongodbmongoosenode.js

My app works locally, but in production I can't seem to fetch a specific thing from mongo using mongoose. I've tried:

var Coach = mongoose.model('Coach', CoachSchema);

  • Coach.findOne({ _id: req.session.userId}, function (err, coach) {})
  • Coach.find({ _id:req.session.userId}, function (err, coach) {})
  • Coach.findById(req.session.userId).exec(function(err, coach)){})

I've received the same error:
Cast to ObjectId failed for value "586bc06bd09d870012baa5b8" at path "_id" for model "Coach"

Like I said, it works locally with both nodemon and heroku local but on my heroku production server it doesn't work.

I've read a little about this type of cast error here:

But no luck yet. Any help would be great. Thank you in advance.

Best Answer

I had faced this same issue sometimes back, for mongoose version > 4.7.2

I solved it by installing mongoose version 4.7.2

npm install mongoose@4.7.2

also, you can change your package.json so that it uses this exact version of mongoose.

"mongoose" : "4.7.2"

This bug is caused because of bson package. which gives the error

Hex is not a function on ObjectId creation

Read more about it in this link.

This bug started when mongoose was updated from version 4.7.2 to 4.7.3. You can update to newer version of mongoose when this bug is solved. You can track the bug here and here.

So, Finally you can solve this error by installing mongoose version 4.7.2

Related Topic