【问题标题】:ValidationError: Cast to ObjectID failedValidationError:转换为 ObjectID 失败
【发布时间】:2015-09-30 02:39:02
【问题描述】:

我想使用 Mongoose 和 Express 向数组添加一个值。

router.put( '/projectUser/:id', function( req, res ) {
    return ProjectProfile.findById( req.params.id,  function( err, project ) {
        project.users.push(req.body.user);
        return project.save( function( err ) {
            if( !err ) {
                console.log( 'Project Users updated' );
                return res.send( project );
            } else {
                console.log( err );
                return res.send('ERROR');
            }
        });
    });
});

当我这样做时,我收到以下错误

{ [ValidationError: Project validation failed]
  message: 'Project validation failed',
  name: 'ValidationError',
  errors: 
   { 'users.-1._id': 
      { [CastError: Cast to ObjectID failed for value "EXAMPLE-STRING" at path "_id"]
        message: 'Cast to ObjectID failed for value "EXAMPLE-STRING" at path "_id"',
        name: 'CastError',
        kind: 'ObjectID',
        value: 'EXAMPLE-STRING',
        path: '_id' } } }

项目架构

var ProjectProfileSchema = new mongoose.Schema({
    projectName: String,
    productName: String,
    users: [{user:'string'}]
});

EXAMPLE-STRING 值是标准字符串。它需要 Mongoose _id 吗?

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    您推送到project.users 数组的对象应该是User 文档(假设这是您的模型的名称),或者它应该是属于的ObjectId(或代表一个的字符串)到数据库中的User 文档。

    根据 req.body.user 的确切含义,这可能有效:

    project.users.push(new User(req.body.user));
    

    【讨论】:

    • 我的问题没有足够的细节。我应该推送一个对象而不是一个字符串。
    猜你喜欢
    • 2018-06-30
    • 2018-01-06
    • 1970-01-01
    • 2022-01-23
    • 2021-03-14
    • 2019-06-11
    • 2020-08-25
    • 2013-03-24
    • 2021-06-27
    相关资源
    最近更新 更多