当向 /customers/41224d776a326fb40f000001
发送请求并且带有 _id
41224d776a326fb40f000001
的文档不存在时,doc
是 null
并且我返回一个 404
:
Controller.prototype.show = function(id, res) {
this.model.findById(id, function(err, doc) {
if (err) {
throw err;
}
if (!doc) {
res.send(404);
}
return res.send(doc);
});
};
但是,当 _id
与 Mongoose 期望的“格式”(我想)不匹配时,例如 GET/customers/foo
会返回一个奇怪的错误:
CastError: Cast to ObjectId failed for value "foo" at path "_id".
那么这个错误是什么?
最佳答案
Mongoose 的 findById
方法将 id
参数转换为模型的 _id
字段的类型,以便它可以正确查询匹配的文档。这是一个 ObjectId,但 "foo"
不是有效的 ObjectId,因此转换失败。
41224d776a326fb40f000001
不会发生这种情况,因为该字符串是有效的 ObjectId。
解决此问题的一种方法是在 findById
调用之前添加一个检查,以查看 id
是否是有效的 ObjectId:
if (id.match(/^[0-9a-fA-F]{24}$/)) {
// Yes, it's a valid ObjectId, proceed with `findById` call.
}
关于mongodb - 什么是 Mongoose 错误 Cast to ObjectId failed for value XXX at path "_id"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14940660/
相关文章:
mongodb - E : Unable to locate package mongodb-org
javascript - 如何跨 NodeJs 应用程序和模块正确重用与 Mongodb 的连接
mongodb - 在 mongoDb 中,如何通过索引删除数组元素?
mongodb - 如何查看 mongodb 从 mongo shell 监听的端口?
windows - MongoDB 新手无法运行命令 mongo
mongodb - 如何使用 Robo 3T 从 MongoDB 导出 JSON
javascript - Mongoose,使用查找选择特定字段