Mongoose:类型错误:hex不是一个函数。

5
我正在使用mongoose开发一个简单的数据持久化应用程序,在遇到以下错误后:

CastError: Cast to ObjectId failed for value "{ _id: 'id' }" at path "_id" for model 'foo'

我尝试使用mongoose.Types.ObjectId,如各种线程所建议的一样,例如:https://dev59.com/OGQm5IYBdhLWcg3w8Sre#17223701,但现在我又得到了一个新的错误:

TypeError: hex is not a function.

这是代码中相关的部分:
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个回答

7

最近两天我也遇到了同样的问题,原因是版本不兼容。

我之前使用的版本是:

"mongodb": "^2.2.19", "mongoose": "^4.7.6",

然后出现了“Hex is not a function”的错误。

所以我把版本改成了:

"mongodb": "2.1.7", "mongoose": "4.4.8"

这样就可以解决这个问题了。我认为他们移除了hex函数和其它一些函数,所以请在你的package.json文件中安装以下版本:

"mongodb": "2.1.7", "mongoose": "4.4.8"

不要在版本名称前加上^,然后再进行安装即可。


这对我有用。如果我们想要更新,我们必须弄清楚预期的是什么。 - Kevin Curry

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

起初我只是这样做,但它抛出了以下错误:CastError: Cast to ObjectId failed for value "{ _id: 'id' }" at path "_id" for model 'foo'。 - Pankaj Barnwal
1
好的,这有点令人困惑,请尝试:Campground.findOne({_id: id}, function (err, found) { ... }); - fawee
我认为 .findOne({_id:id}) 和 findById(id) 基本上是相同的。我已经尝试过了,但输出没有变化。 - Pankaj Barnwal

1
如果您正在使用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
 } );

2
它一直报同样的错误:TypeError: hex 不是一个函数。 - Pankaj Barnwal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接