mongodb - 什么是 Mongoose 错误 Cast to ObjectId failed

当向 /customers/41224d776a326fb40f000001 发送请求并且带有 _id 41224d776a326fb40f000001 的文档不存在时,docnull 并且我返回一个 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,使用查找选择特定字段

ruby-on-rails - Mongodb:使用前需要了解什么?

mongodb - Meteor 有哪些安全机制?

mongodb - 如何从 Mac OS 终端连接到远程 mongo 服务器