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 ,如此处所述