CastError: Cast to ObjectId failed for value
发布于 10 年前 作者 rudyboy 12095 次浏览 最后一次编辑是 8 年前 来自 问答

使用mongoose, 进行数据查询

Model.findOne( { _id: id }, function (err, callback ) )

报错信息为:

CastError: Cast to ObjectId failed for value

如果查询params为非ObjectId格式时,大家一般都如何处理?

1: 通过callback处理异常?

2: 在查询之前就进行判断?如果不是正确格式则就不进入查询

5 回复
  1. callback 无需特殊处理这个异常
  2. 在查询之前就进行判断。或者说,查询之前就强制转换成字符串。如果此时 param 非法的话,结果就是查不到任何数据。

@alsotang

var id = req.params.id

这里的id已经是字符串了,假如我查询的 id 为 ‘test’ (不是‘552a3a7ecd5ee87201ab1edc’格式的),出现的是上面的报错内容。 看到cnode源码里面也是直接查询的,没做处理呀。 网上找到的一个处理方式: http://stackoverflow.com/questions/14940660/whats-mongoose-error-cast-to-objectid-failed-for-value-xxx-at-path-id 不知道如何才能做到 param 非法,结果就是查不到任何数据。

@rudyboy 对的。。cnode 没有做什么特殊处理,如果 id 不合法就只是会查询不到,而不会报 cast 的错误。

如果查询的id已经是ObjectId 格式的了,但是依然会抛出这个错误,又会是什么原因呢?

我也遇到这个问题了,MongooseError: Cast to ObjectId failed for value “user[i]._id” at path “_id”,

router.get("/detail/:id",function(req,res){
  var id=req.params.id;
  userModel.findOne({_id:id},function(err,data){
    if(err) return console.log(err);
    res.render("userDetail",{
      user:data
    })
  })
})

不知道哪错了

回到顶部