对于模型“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"
就像我说的,它与本地nodemon
和heroku 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) { });
希望能帮助到你。