首页 文章

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

提问于
浏览
2

架构:

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:对于路径“description”中的值“undefined”,转换为字符串失败

1 回答

  • 3

    更新失败,因为当您将描述设置为 not required 时,如果 update 对象中定义了一个,则更新方法仍会查看 update.description 的值 . 这是因为,根据docs

    更新字段使用相同的更新运算符或字段:值规范来修改所选文档 .

    在任何情况下,解决此问题的简单方法是在将描述值插入 update 对象之前检查是否正在传递描述值 .

    var someDescription  = req.body.args.description;
    var update = {name: someName};
    if(someDescription)
      update['description'] = someDescription;
    

    在旁注中,不允许 null s,如here所述

相关问题