里面一个MEAN.js的应用程序,我有一个具有subdoc的参考架构:设置在一个未定义/ null的子文档ObjectID字段的值会产生铸造到的ObjectId错误
var EmployeeSchema = new Schema({
supervisor: {
type: Schema.Types.ObjectId,
ref: 'User',
},
...
我能使用或不使用监督员字段,从模式创建模型。如果该值设置为创建,那么我就能来取消它,像这样:
employee.supervisor = undefined;
employee.save(function(err) {
...
然而,如果该字段值是不确定的已经,那么我就无法在其后设置的任何值 - 这将产生以下错误:
CastError: Cast to ObjectId failed for value "[object Object]" at path "supervisor"
事实上,在试图再次将该值设置为不确定的,具有相同的.save代码路径,会导致同样的错误。这个错误来自哪里?它指的是什么(当我发送一个未定义的值)?
我对猫鼬比较新。这感觉像是一个基本问题,并且很可能是用户错误。如果我没有使用正确的模式,请告诉我。我正在使用猫鼬3.8.8,我转移到3.8.23,无济于事。
编辑:一些可能很重要的事情是,当员工返回给客户时,主管人员已经填充。使用MEAN boilerplate express控制器进行更新似乎存在一个问题,即执行将已更改状态的_.assign发送给发送给客户端的req.employee数据。
如果我再次手动查询员工,并设置/取消设置主管字段,那么我可以在没有错误的情况下获得预期的行为。这包括设置为未定义,并设置回有效值。因此,它归结为人口+使用请求数据执行更新的组合。
使用$取消设置为按[链接](http://stackoverflow.com/questions/4486926/delete-a-key-from-a-mongodb-document-using-mongoose)未定义+保存等同于更新+未设置。这不是这种情况吗? – 2015-02-25 01:43:32