【问题标题】:Update document with error: Cast to string failed for value undefined更新有错误的文档:Cast to string failed for value undefined
【发布时间】:2013-09-22 09:48:54
【问题描述】:

我有一个简单的文档,其中包含名称(必需)、描述(可选)。在我的模型中,我使用有效的 id 更新了一个文档,并传递了值为 undefined 的描述,因为我想从文档中删除此属性。但是,我收到以下错误: message=Cast to string failed for value "undefined" at path "description", name=CastError, type=string, value=undefined, path=description。当用户不提供描述时,如何在更新时删除描述属性?有可能吗?

谢谢

/*jslint indent: 2, node: true, nomen: true*/

'use strict';

var Schema = require('mongoose').Schema;
var mongoose = require('mongoose');

var mongooser = require('../../lib/mongooser');

// Schema

var schema = new Schema({
  name: {
    required: true,
    set: mongooser.trimSetter,
    trim: true,
    type: String,
    unique: true
  },
  description: {
    set: mongooser.trimSetter,
    trim: true,
    type: String
  }
});

// Export

module.exports = mongoose.model('Role', schema);

// Role.js

var update = function (model, callback) {
    var test = { name: 'Users', description: undefined };

    RoleSchema.findByIdAndUpdate(model.id, test, function (error, role) {
      callback(error, role);
    });
};

【问题讨论】:

    标签: javascript node.js mongoose


    【解决方案1】:

    尝试像这样下拉到本机驱动程序:

    var update = function (model, callback) {
       RoleSchema.update({_id: model.id}, {$unset: {description: 1 }}, callback);
       });
    };
    

    【讨论】:

    • 有没有告诉猫鼬这是我的新数据,使用它更新它,这样我就不必设置未设置的单个字段,如果它们丢失了?谢谢
    • 您还应该描述这里发生的事情,而不是仅仅删除一段代码。它本可以通过这种方式帮助更多的读者。
    【解决方案2】:

    如果有人不想下拉到原生驱动,参考这个答案https://stackoverflow.com/a/54320056/5947136

    这里的问题是使用 type 作为 Schema 中的键。

    var schema = new Schema({
     name: {
        required: true,
        set: mongooser.trimSetter,
        trim: true,
        type: String, // <-- This is causing the issue
        unique: true
      },
      description: {
        set: mongooser.trimSetter,
        trim: true,
        type: String // <-- This is causing the issue
      }
    });
    

    请参阅上述答案以获得不需要本机驱动程序的解决方案。

    【讨论】:

    • 谢谢!我不敢相信我没有看到。为了清楚起见,使用 type: String 将强制 mongoose 尝试将整个对象转换为字符串并失败。
    猜你喜欢
    • 1970-01-01
    • 2020-10-21
    • 2021-01-07
    • 2015-08-10
    • 2022-06-14
    • 2017-04-04
    • 2017-08-14
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多