架构:
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) { ...
这是错误,是的,不能将null / undefined强制转换为String,但为什么要尝试?
CastError:对于路径中的值“undefined”,强制转换为字符串失败 “说明”
答案 0 :(得分:3)
更新失败,因为在您将说明设置为not required
的同时,如果{{1}中定义了一个update.description
,则更新方法仍会查看update
的值对象。这是因为,根据docs:
更新字段使用相同的更新运算符或字段:值 修改所选文件的规范。
在任何情况下,解决此问题的简单方法是在将描述值插入update
对象之前检查是否正在传递描述值。
var someDescription = req.body.args.description;
var update = {name: someName};
if(someDescription)
update['description'] = someDescription;
在旁注中,null