当我尝试将属性更新为null时,findByIdAndUpdate抛出强制转换错误

时间:2013-06-27 16:44:34

标签: node.js mongoose

架构:

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”,强制转换为字符串失败   “说明”

1 个答案:

答案 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

表示不允许使用{{1}}
相关问题