【问题标题】:findByIdAndUpdate throwing cast error when I try and update a property to null当我尝试将属性更新为 null 时,findByIdAndUpdate 抛出强制转换错误
【发布时间】:2013-06-25 06:53:01
【问题描述】:

架构:

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: 路径中值“未定义”的转换为字符串失败 “描述”

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

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

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

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

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

    附带说明,nulls 是不允许的,如 here 所述

    【讨论】:

    • 我有类似的问题,但相反,我很想在用户不提供描述时删除它,但是,当我调用更新时,旧的描述仍在 db 中,因为我提出了一个问题。想知道你对我的问题有什么想法吗? stackoverflow.com/questions/18858613/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多