在Mongoose中将字段设置为null时出错

时间:2013-11-06 11:26:01

标签: node.js mongoose

我正在使用MongooseJS。我收到以下错误:

{ message: 'Cast to ObjectId failed for value "" at path "parent"',
  name: 'CastError',
  type: 'ObjectId',
  value: '',
  path: 'parent'
}

我不想为这个对象设置父级。我哪里错了?我该怎么办?

更新

var category = new Category(req.body)
if(typeof category.parent === 'undefined'){
    category.parent=undefined;
}

类别架构是:

var CategorySchema = new Schema({
  name: {
    tr: {type : String, default : '', trim : true},
    en: {type : String, default : '', trim : true}
  },
  description: {
    tr: {type : String, default : '', trim : true},
    en: {type : String, default : '', trim : true}
  },
  subcategories:[{type : Schema.ObjectId, ref : 'Category', null: true}],
  parent: {type : Schema.ObjectId, ref : 'Category', null: true},
  products:[{type : Schema.ObjectId, ref : 'Product'}],
  images : [String],
  order: {type : Number, default: 0},
  createdAt  : {type : Date, default : Date.now},
  locale: {type : String, null: false}
})

我的玉代码是:

.controls
        select#parent(name="parent")
          option(value="") Select
          each cat in categories
            - if (category.subcategories.map(function(e) { return e.id; }).indexOf(cat.id) != -1)
                option(value=cat.id, selected) #{cat.name.tr}
            - else
                option(value=cat.id) #{cat.name.tr}

因此,如果用户没有选择父级,它会向服务器发送“”,服务器会发出错误。

2 个答案:

答案 0 :(得分:0)

错误声明您无法将您尝试设置的类型转换为category.parent属性,因为它需要ObjectId。我希望通过parent的{​​{1}}字段值不是req.body

此外,所有属性都在MongooseJs模型上定义,不会是ObjectId

您需要将其设置为undefined

null

这将清除价值。

答案 1 :(得分:0)

老问题,但我遇到了同样的问题,想分享答案。在创建Category - 对象之前,如果未设置有效值,则必须从parent手动删除req.body - 属性:

if (req.body.parent == "")
  delete req.body.parent; // or req.body.parent = null;
var category = new Category(req.body);

之后将其设置为null无法工作 - 不要问我原因。