findByIdAndUpdate当我尝试更新属性为null时抛出转换错误
架构:
var SomeSchema = new Schema({ name: { type: String, required: true, unique: true }, description: { type: String, required: false } },{ versionKey: false } );
/ /在这种情况下,客户端没有通过我的描述,这是好的,因为这个属性不是必需的。 //为什么更新失败?
var update = {name: someName, description: someDescription}; findByIdAndUpdate(id, update, function(err, something) { ...
这是错误,yup不能将null / undefined转换为String,但为什么试试?
CastError:强制转换为string“description”path中的值“undefined”失败
更新失败,因为在将描述设置为not required
,如果update
对象中定义了更新方法,update方法仍将查看update.description
的值。 这是因为,根据文档 :
更新字段使用相同的更新运算符或字段:值规范来修改选定的文档。
在任何情况下,解决这个问题的简单方法是在插入到update
对象之前检查描述值是否被传递。
var someDescription = req.body.args.description; var update = {name: someName}; if(someDescription) update['description'] = someDescription;
在附注中,不允许出现null
,如此处所述