Mongoose:TypeError:hex不是一个函数

我正在开发一个简单的数据持久性应用程序使用mongoose,陷入这个错误之后

CastError:在模型“foo”的path“_id”处投射到ObjectId的值“{_id:”id“}”失败“

我试图使用mongoose.Types.ObjectIdbuild议由各个线程,一个部分: https ://stackoverflow.com/a/17223701/4206519,但现在我得到一个新的错误:

TypeError:hex不是一个函数。

这是代码的相关部分:

 app.get('/campgrounds/:id', function(req, res){ var id = req.params.id; var ObjectId = mongoose.Types.ObjectId(id); Campground.findById(ObjectId, function(err, found){ if (err) { console.log(err); } else { //render show template with that campground res.render('show.ejs', {campground: found}); } }); }); app.listen(3000, function(){ console.log("server has started"); }); 

作为一个新手,我可能会在这里犯一个简单的错误,任何帮助将不胜感激。

从过去的两天我也遇到同样的问题,这是由于版本问题

我正在使用这些版本“mongodb”:“^ 2.2.19”,

“mongoose”:“^ 4.7.6”,并得到Hex不是函数的错误

那么我把版本更改为“mongodb”:“2.1.7”,“mongoose”:“4.4.8”

并开始工作,所以我认为他们已经删除了hexfunction和其他所以尝试安装这个版本在你的package.json不要使用^之前的版本名称只需添加“mongodb”:“2.1.7”,“mongoose”:“4.4 .8“并安装

删除var ObjectId = mongoose.Types.ObjectId(id); 它应该工作…并传递id而不是在findById函数中的ObjectId 🙂

如果你正在使用Mongodb驱动程序,你可以这样做

 var ObjectID = require('mongodb').ObjectID var id = new ObjectID(req.params.id); // Hex 

mongoose

 var mongoose = require('mongoose'); var id = mongoose.Types.ObjectId('4edd40c86762e0fb12000003'); var _id = mongoose.mongo.ObjectId("4eb6e7e7e9b7f4194e000001"); console.log(id); console.log(_id); //4edd40c86762e0fb12000003 //4eb6e7e7e9b7f4194e000001 

如何在findById中使用

 Campground.findById(id.toString(), function (err, found) { // Do Whatever you like after getting data } );