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 转换为字符串,但为什么要尝试?

CastError:转换为字符串失败,路径“描述”处的值“未定义”

4

1 回答 1

3

更新失败是因为,当您将 description 设置为not required时,更新方法仍将查看对象中update.description是否定义了一个的值update。这是因为,根据文档

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

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

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

在旁注中,nulls 是不允许的,如此处所述

于 2013-06-27T18:16:53.677 回答