2016-10-10 1 views
0

を次のように私は、オブジェクトを持っている:Mongooseスキーマでは、未知のオブジェクトプロパティ/キーのタイプを定義できますか?たとえば、

{ 
    foo: "string", 
    bar: "another string", 
    baz: 4     // Incorrect type 
} 

私は、オブジェクトのプロパティ(FOO、バー、バズ)の名前を知らないが、私は唯一の各プロパティはString型であることなどそのための必要"baz"は拒否される/エラーを投げる。

このデータのモデルスキーマはどのように見えますか?私はこれを行う可能性がある唯一の方法は、オブジェクト/モデル全体の混合型に似たカスタムタイプを使用することです。

答えて

0

私が知る限り、「ワイルドカード」スキーマのパス検証のオプションはありません。 できることはstrict: falseスキーマを定義し、pre save and update関数を定義することです。

スキーマは次のようになります。

var TestSchema = new mongoose.Schema(
    { 

    }, 
    { 
     strict: false 
    } 
); 

それには定義されたフィールドが存在しないことを意味し、あなたが望む任意のフィールドを入力することができます。あなたがpre update機能に同じことをしたいと思う

TestSchema.pre('save', function (next) { 
    var doc = this.toObject(); 
    for (var prop in doc) { 
     if ('string' !== typeof doc[prop]) { 
      next(new Error('validation error')); 
     } 
    } 

    next(); 
}); 

:今、あなたはpre save機能を保存する前に、文書を検証します。あなたはここにmongooseMiddleware詳細を読むことができます:

http://mongoosejs.com/docs/middleware.html

関連する問題