schema.pre('save',function(..){...})
의 비즈니스 로직을 기반으로 특정 필드에 스키마를 동적으로 연결하고 싶습니다. 가능하다면 어떻게해야합니까? 동적으로 유효성을 검사하기 위해 스키마를 동적으로 첨부합니다
var fact= new Schema({
name: { type: String, required: true, index: { unique: false }}
,value: {type: {}, required: true}
,moreinfodesc: { type: String, required: false}
,createddate : { type: Date, required: true, default: Date.now, select: false } }
}, { collection: 'Fact' });
var factSchema= new Schema({
name: { type: String, required: true, index: { unique: true }}
, valueType: { type: {}, required: true}
,isMulti: {type: Boolean, required: true }
//ACL-stuff
,directChangeRoles: {type: [String]} //i.e: [super, admin,owner]
,suggestChangeRoles: {type: [String]} //ie: [editor]
,enum: {type: [{}]}
,mixins: {type: [String]}
}, { collection: 'FactSchema' });
이 편집 할 엔티티 ''특정의 ''사실 수 있도록 단순화 된 구조
는e.g: entityA.facts=[fact]
로 볼 수 있습니다 스키마의 fact.value
에서 mongoose와 관련된 모든 유형을 가질 수 있습니다. 그러나 런타임에이를 FactSchema.valueType
("부울", "문자열"또는 " 태그]). 이것은 모두 성가신 것처럼 보일지 모르지만 이것은 내가 여러 가지 이유로 가고 싶습니다.
fact.name=tags
과 같은 특정 사실에 대해 fact.value
유형에 [Tag]
을 런타임에 할당한다고 가정 해 보겠습니다. 이를 위해 평범한 것처럼 유효성 검사를 사용하여 Tag
-schema를 설정하고 fact.value
의 유효성을 검사해야합니다.
내가 fact.pre('save',function(..){.. //validation here })
에 fact.value
에 어떻게 든 "연결"는 [Tag]
-schema의 생각과 fact.value
가 디자인 타임이 아닌 런타임에 유형 [Tag]
할당 된 것처럼 희망 검증 마술이 일어날 것입니다.
마지막으로 질문 : '첨부'가 가능한지 전혀 알 수 없습니다. 그렇다면 어떻게해야합니까?
감사합니다.
감사합니다 아론, 몽구스가 좋은 물건입니다! 그 동안 몽구스의 'on-the-fly'스키마를 사용하여 해결책을 찾았습니다. 나는'fact.save'를 호출하기 전에'fact.set ('value', vals, multivalued? [onTheFlySchema] : onTheFlySchema);와 같은 것을 호출합니다. 이것은'onTheFlySchema'에서 모든 유효성 검사, 후크 설정을 포함하여 훌륭하게 작동합니다. 제안 : 'on-the-fly'스키마를 좀 더 광고하고 싶을 수도 있습니다. :) –