2015-07-11 127 views
0

我想使用Mongoose和Express将值添加到数组中。ValidationError:强制转换为ObjectID

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'}] 
}); 

的值例子字符串是一个标准的字符串。它需要一个Mongoose _id吗?

回答

1

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

根据什么req.body.user正是,这可能工作:

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

我没有在我的问题有足够的细节。我应该推动一个对象而不是一个字符串。 – wtmcm

相关问题