对于模型“Coach”,投射到ObjectId的path“_id”的值“”失败

我的应用程序在本地工作,但在生产中我似乎无法使用mongoose从mongo获取特定的东西。 我试过了:

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)){})

我收到了同样的错误: Cast to ObjectId failed for value "586bc06bd09d870012baa5b8" at path "_id" for model "Coach"

就像我说的,它与本地nodemonheroku local但在我的heroku生产服务器不起作用。

我在这里读了一下这种types的转换错误:

  • 什么是Mongoose错误对于path“_id”中的值XXX,转换为ObjectId失败?
  • Mongoose拒绝将有效的string转换为ObjectId
  • 对于模型“User”,投射到ObjectId的path“_id”的值“586cc8b3ea780c071bbe2469”失败

但没有运气呢。 任何帮助将是伟大的。 先谢谢你。

mongoose版本> 4.7.2,我有时也面临同样的问题

我通过安装mongoose版本4.7.2解决了它

 npm install mongoose@4.7.2 

另外,你可以改变你的package.json ,使它使用这个确切版本的mongoose。

 "mongoose" : "4.7.2" 

这个bug是由于bson包引起的。 这给出了错误

Hex不是创buildObjectId的函数

在这个链接阅读更多关于它。

mongoose从版本4.7.2更新到4.7.3时,这个错误开始了。 这个bug解决后,你可以更新到新版本的mongoose 。 你可以跟踪这里和这里的错误。

所以,最后你可以通过安装mongoose版本4.7.2来解决这个错误

也许你必须尝试这样的事情:

  Coach.findOne({ _id: mongoose.Types.ObjectId(req.session.userId)}, function (err, coach) { }); 

希望能帮助到你。