のビジネス ロジックに基づいて、スキーマを特定のフィールドに動的にアタッチしたいと考えています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
に、マングースに関する限り、任意の型を持つことができます。FactSchema.valueType
ただし、実行時に("Boolean"、"String"、または "[Tag]" などのより複雑なものを含む文字列)で定義されているスキーマに制約したいと考えています
。これはすべて面倒に思えるかもしれませんが、いくつかの理由から、これが私が行きたい方法です。
したがって、特定の事実について、実行時に型fact.name=tags
を割り当てたいと しましょう。このために、私は通常のように検証を使用して -schema をセットアップし、それに対して検証を行います。fact.value
[Tag]
Tag
fact.value
[Tag]
-schema をfact.value
何らかの形で "アタッチ" することを考えていたので、実行時ではなく設計時にタイプが割り当てられたかのfact.pre('save',function(..){.. //validation here })
ように検証が魔法のように行われることを願っていました。fact.value
[Tag]
最後に質問です。その「アタッチ」が可能かどうかはわかりません。
ありがとう。