Mongoose:TypeError:hex不是函数

时间:2017-01-08 14:46:20

标签: javascript node.js mongodb mongoose

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

  

CastError:对于模型'foo',路径为“_id”的值为“{_ id:'id'}”的对象导入ObjectId失败

我尝试使用mongoose.Types.ObjectId按照各种线程建议,一个部分: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");
});

作为一个新手,我可能在这里犯了一个简单的错误,任何帮助都将受到赞赏。

3 个答案:

答案 0 :(得分:6)

从过去2天开始,由于版本问题,我也遇到了同样的问题

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

" mongoose":" ^ 4.7.6", 并获得Hex不是函数的错误

然后我将版本更改为  " mongodb":" 2.1.7",  " mongoose":" 4.4.8"

它开始工作,所以我认为他们已经删除了十六进制功能和其他所以尝试安装此版本后 在你的package.json中,不要在版本名称之前使用^添加  " mongodb":" 2.1.7",  " mongoose":" 4.4.8" 并安装

答案 1 :(得分:1)

删除var ObjectId = mongoose.Types.ObjectId(id);,它应该有效 ...并在findById函数中传递id而不是ObjectId:)

答案 2 :(得分:1)

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

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

猫鼬

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