当前位置: 首页 > 知识库问答 >
问题:

对于路径“\u id”处的值“586D6287FC14D30E0AC5379”,转换为ObjectId失败

孟华晖
2023-03-14

我正在用node/express/mongo/mongoose构建一个应用程序。我遇到了一个我似乎无法理解的错误,谷歌搜索到目前为止没有任何帮助。

我创建了一个简单的、以猫为主题的示例来重现我遇到的错误。我基本上是通过ObjectId检索一个对象。我正在使用创建对象时自动生成的对象id(作为字符串)。

当我导航到路径localhost:3000/kitty/586d62878fc14d30e0ac5379我得到以下错误:'Cast to ObjectId的值失败"586d62878fc14d30e0ac5379"在路径"_id"为模型"Kitten"。令人不快的代码行是我对模型的召唤。kitten.findById()[见下文]。

据我所知,ObjectId字符串是有效的。

我尝试将我的字符串对象ID转换为猫鼬对象ID,并将其传递给findById而不是字符串值,但这只会产生一个奇怪的“十六进制不是函数”错误,此外,我认为这是不必要的,因为猫鼬自动将有效的字符串ID转换为对象ID。

我正在使用托管的mongodb实例(mlab)。

以下是我的代码供参考:

包裹json:

{
  "name": "testapp",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "~1.15.2",
    "cookie-parser": "~1.4.3",
    "debug": "~2.2.0",
    "express": "~4.14.0",
    "jade": "~1.11.0",
    "mongodb": "^2.2.19",
    "mongoose": "^4.7.6",
    "morgan": "~1.7.0",
    "serve-favicon": "~2.3.0"
  }
}

app.js:

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var index = require('./routes/index');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', index);
app.use('/users', users);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

指数js:

var express = require('express');
var router = express.Router();
var model = require('./model');
var mongoose = require('mongoose');

/* GET home page. */
router.get('/kitty/create', function(req, res, next) {

    var fluffy = new model.Kitten({ name: 'fluffy' });

    fluffy.save(function(err, fluffy){
        if(err) return next(err);
        res.render('index', { title: 'Express' });
    });

});

router.get('/kitty/:id', function(req, res, next){

    // find kitty by id
    model.Kitten.findById(req.params.id, function(err, kitty){

        if(err) return next(err);

        if(!kitty){
            res.send('no kitty found');
        } else {
            res.send(kitty._id);
        }

    });

});

module.exports = router;

模型js:

var mongoose = require('mongoose');

mongoose.connect('mongodb://xxxxx:xxxxx@xxxxx.mlab.com:xxxxx/xxxxx');

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {

    var kittySchema = mongoose.Schema({
        name: String
    });
    var Kitten = mongoose.model('Kitten', kittySchema);

    exports.Kitten = Kitten;

});

如果您能提供任何见解,我们将不胜感激。

共有1个答案

施学
2023-03-14

我也有同样的问题。猫鼬版本似乎有问题。我从4.7降级。6至4.7。2(升级前我使用的最后一个版本),没有更多问题。

我不知道这个问题是在哪个版本出现的,但基于谷歌搜索时没有答案,可能是4.7。6(于2017年1月2日发布)。

正在做

npm install --save mongoose@4.7.2

我现在会修好的。

希望这有帮助:)

编辑:在4.7之后的版本上,这肯定是一个bug。2.https://github.com/Automattic/mongoose/issues/4867#issuecomment-270342054

 类似资料:
  • 好吧,我看到这里有一些这样的帖子,但他们没有帮助我。。。 让我描述一下我的问题: 我有两个模式 现在我已经有了一个B对象,我想创建一个a对象。 所以我这样做: b对象是从我的monogDB加载的。调试器为我的b显示了一个有效的ObjectId(53627ed535d9d04416e26218或Sb~Õ5ÙÐDáb)。 但是,当我保存新的A-Object时,会出现错误:“CastError:Cast

  • 我试图在一个MEAN堆栈应用程序中处理一个计划。当我调用findOne时,我得到了这个错误: 我就是这样做的: 我注意到,当我把id作为一个字符串(如下所示)时,一切正常。 所以,我控制台: 我一直在尝试我在这里找到的东西,但任何东西都可以帮助我解决这个问题:/

  • 我的控制器obter_todos_precos只是一个console.log,没有使用任何模型,但我得到以下错误: 为什么我会有这种行为?

  • Comments是嵌套在Post架构中的数组。我想通过推送一个新的评论到评论数组更新相应的帖子。但是得到了错误:CastError:对于模型“post”的路径“_id”处的值“comments”,向ObjectId的强制转换失败 阅读相关帖子 尝试使用“mongoose.types.objectid”,但不起作用 猫鼬版^5.5.4 我在这里使用的所有ID都是有效的 我认为问题出在“comment

  • 当我发送后请求我得到以下错误: 对于模型“用户”的路径“\u id”处的值“2”,转换为ObjectId失败 有什么建议吗? 提前感谢!!!

  • 我希望有人能帮我找出我在这里做错了什么。我一直在寻找,我可以找到很多类似的问题,但没有一个我足够聪明来解决我的问题。我得到以下错误: CastError:对于模型“customer”的路径“\u id”处的值“customers”,转换为ObjectId失败 它以前是有效的,我设法打破了它,我解开了所有我认为我改变了的东西,我仍然得到了错误。 这是我的模式: 我的路线: 和我的控制器: 此外,以下