Mongoose, CastError: 모델이 포함된 모델을 저장하려고 할 때 값에 대해 배열로 캐스트하지 못했습니다.
나는 mongoose를 사용하여 나의 mongodb 데이터베이스에 대한 모델을 만들려고 합니다.이것이 제가 하려는 일입니다.
var Class = mongoose.model('Class', {className: String, marks: [{type: Number}], grades: [{type: Number}]});
var User = mongoose.model('User', {email: String, classes: [Class] });
//Lets create a new user
var class1 = new Class({className: 'aaa', marks: [72, 88, 63], grades: [30, 40, 30]});
var user1 = new User({email: 'aaa@some.com', classes: [class1]});
저축class1
정상적으로 작동하는 것 같지만 mongodb를 확인하면 다음과 같이 표시됩니다.
{
"_id" : ObjectId("someId"),
"className" : "TEST1234",
"grades" : [ 30, 40, 30 ],
"marks" : [ 72, 88, 63 ],
"__v" : 0
}
뭐가"__v : 0"
?
사용자를 저장하지 못했습니다. 다음 오류가 발생했습니다.
ValidationError: CastError: 경로 "classes"에서 "{marks: [72, 88, 63], 등급: [30, 40, 30], _id: someId, className: 'TEST1234' }" 값에 대해 어레이에 캐스트가 실패했습니다.
그 오류는 정확히 무엇을 의미합니까?왜 배열에 무언가를 던지는 거지?해선 안된다classes: [Class]
활자의 배열이 나다class
?
이런 스키마를 만들 때도 비슷한 문제가 있었습니다.
QuestionnaireSchema = mongoose.Schema({
formId: Number,
name: String,
questions: [
{
type: String,
title: String,
alternatives:[{
label: String,
value: "Mixed"
}]
}
]
});
제 실수는 필드 이름으로 "type"을 사용하고 있고 이것은 mongoose의 예약 단어입니다.
나는 그냥 변합니다.
type: String,
로.
formType: String,
그리고 그것이 효과가 있습니다.
참조: https://github.com/Automattic/mongoose/issues/1760
type이라는 속성에 형식 규칙을 명시적으로 정의하는 것은 허용되며 오류를 발생시키지 않습니다.다음과 같이:
type: {type: String}
클래스 정의를 다음으로 변경해 보십시오.
var classSchema = mongoose.Schema({className: String, marks: [{type: Number}], grades: [{type: Number}]});
var userSchema = mongoose.Schema({email: String, classes: [classSchema] });
var User = mongoose.model('User',userSchema);
관련 스키마가 없으면 mongoose가 개체를 구문 분석할 수 없으므로 이 작업이 필요합니다.이제 내부 클래스 개체에 대한 새 스키마를 만들고 주 사용자에서 참조할 때 스키마 몽구스가 개체를 구문 분석할 수 있어야 합니다.
모델 정의가 잘못되었으므로 아래와 같이 수정해야 합니다.
// var Schema = mongoose.Schema;
var User = mongoose.model('User',{
email: String,
classes: [ {type: Schema.Types.ObjectID, ref: 'Class'}]
});
var Class1 = new Class({/*yourDataWillBeHere*/})
Class1.save(function(err, classData) {
var User1 = new User({/*YourDataWillBeHere*/})
User1.classes.push(classData._id);
User1.save(function(err, userData) {
//make something with userData object
})
})
그런 다음 데이터를 가져올 수 있습니다.populate()
이것처럼.
User
.find()
.populate('classes')
.exec()
기본적으로 스키마에 키가 'type'인 개체가 있으면 mongoose는 이 개체를 형식 선언으로 해석합니다.
// Mongoose interprets this as 'loc is a String'
var schema = new Schema({ loc: { type: String, coordinates: [Number] } });
TypeKey 변경:
var schema = new Schema({
// Mongoose interpets this as 'loc is an object with 2 keys, type and coordinates'
loc: { type: String, coordinates: [Number] },
// Mongoose interprets this as 'name is a String'
name: { $type: String }
}, { typeKey: '$type' }); // A '$type' key means this object is a type declaration
링크: http://mongoosejs.com/docs/guide.html#typeKey
업데이트 전용
이제 Mongoose는 배열을 중첩하는 문서화된 방법인 하위 문서를 지원합니다.
var arraySchema = new Schema({
property: String
});
var objectSchema = new Schema({
arrays: [arraySchema]
});
원천
http://mongoosejs.com/docs/schematypes.html
mongoose 5.7.0+를 사용하여 이중 중첩 스키마를 사용하여 유사한 문제가 발생했습니다.
키워드와 관련이 없다는 것만 빼면요.type
몽구스 유효성 검사 버그입니다.
https://github.com/Automattic/mongoose/issues/8472
임시 해결 방법:사용하다Schema.Types.Mixed
하위 계획을 위하여.
언급URL : https://stackoverflow.com/questions/33383207/mongoose-casterror-cast-to-array-failed-for-value-when-trying-to-save-a-model
'source' 카테고리의 다른 글
mongorestore 실패: 연결할 수 있는 서버가 없습니다. (0) | 2023.05.02 |
---|---|
레일: FATAL - 사용자에 대한 피어 인증 실패(PG:: 오류) (0) | 2023.05.02 |
문자열이 Bash 스크립트의 정규식과 일치하는지 확인 (0) | 2023.05.02 |
Git for Unity 3D 소스 제어를 사용하는 방법은 무엇입니까? (0) | 2023.05.02 |
Azure 테이블 스토리지 대 CosmosDB 테이블 API (0) | 2023.04.27 |