我试图保存一个带有对象字段架构的猫鼬模型。当我尝试保存时,我收到以下错误。我错过了什么?
我怀疑这可能与猫鼬对象不太像标准javascript对象有关,因为它们被改变了。然而,令我感到困惑的是,我在我的代码的另一部分中使用具有嵌套对象字段且可行的模式执行完全相同的操作。
我尝试过的事情:
模式
var ResultSchema = new mongoose.Schema({
event_id : mongoose.Schema.ObjectId,
event_name: String,
event_type: String,
resultdate : String,
resulttype: {
type: String,
round: Number
},
// resulttype: String,
// resultround: Number,
});
模型保存:
var newResult = new ResultModel({
// objNewResult
event_id: req.body.eventid,//hidden field
event_name: req.body.eventname, //hidden field
resultdate: req.body.resultdate,
// resulttype: resulttypelist,
// resultround: resultroundlist,
resulttype: {
type: req.body.resulttypelist,
round: req.body.resultroundlist
}
});
newResult.save(function (err, result) {
if (err) {
console.log("SOMETHING WENT WRONG");
console.log(err);
} else {
console.log("SUCCESSFUL RESULT ADDITION");
}
});
错误:
ValidationError: results validation failed: resulttype: Cast to String failed for value "{ type: 'standard', round: '1' }" at path "resulttype"
答案 0 :(得分:2)
type
是Mongoose模式中的保留关键字。它用于指定字段的类型。当您指定:
resulttype: {
type: String,
round: String
},
Mongoose会将字段resulttype
视为字符串。所以你必须使用另一个名字而不是类型。
答案 1 :(得分:1)
type
是保留密钥:
默认情况下,如果您有一个带键的对象'键入'在你的模式中,mongoose会将其解释为类型声明。 Source
现在,resulttype
应该是String
类型。您可以改用另一个键:
模式的:
resulttype: {
resultType: String,
round: String
},
模特保存:
var newResult = new ResultModel({
// ...
resulttype: {
resultType: req.body.resulttypelist,
round: parseFloat(req.body.resultroundlist),
}
});