2016-11-21 5 views
0

私はMongooseスキーマでオプションフィールドを作成したいと思います。Mongooseの他のフィールドにオプションのフィールドベースを作成するにはどうすればいいですか?

私のLogスキーマです。

var logSchema = new Schema({ 
    logType: { 
     type: String, 
     enum: ['user', 'lead', 'knowledgecenter'], 
     required: true 
    }, 
    userLog: { 
     name: { 
      type: String, 
      required: true 
     }, 
     userId: { 
      type: Schema.Types.ObjectId, 
      required: true 
     } 
    }, 
    leadLog: { 
     title: { 
      type: String, 
      required: true 
     }, 
     leadId: { 
      type: Schema.Types.ObjectId, 
      required: true 
     } 
    } 
}); 

私はLog上記のスキーマのいずれかで{logType:'user',userLog:{userId:'5fcJFjslkka4lsdk'}}{logType:'lead',leadLog:{leadId:'5fcJFjslkka4lsdk'}}で文書を挿入します。

しかし、この時点でmongoose throw ValidatorError: Path requiredエラーです。

+0

これはトリックを行う必要があります! – 0xtvarun

+0

ですが、ここでは各フィールドに 'required'オプションを設定します。したがって、今はオプションではありません。 – vineet

答えて

1

requiredtrueを設定する代わりに、必要な場合にのみtrueを返す関数に設定することができます。マングースのすべてのフィールドは `id`フィールドを除いて、デフォルトではオプションです

var logSchema = new Schema({ 
    logType: { 
     type: String, 
     enum: ['user', 'lead', 'knowledgecenter'], 
     required: true 
    }, 
    userLog: { 
     name: { 
      type: String, 
      required: function() { return this.logType === 'user'; } 
     }, 
     userId: { 
      type: Schema.Types.ObjectId, 
      required: function() { return this.logType === 'user'; } 
     } 
    }, 
    leadLog: { 
     title: { 
     type: String, 
     required: function() { return this.logType === 'lead'; } 
     }, 
     leadId: { 
     type: Schema.Types.ObjectId, 
     required: function() { return this.logType === 'lead'; } 
     } 
    } 
}); 
+0

ありがとうございます@ジョシュ、あなたはより良い私は上記のスキーマの他のデザインをお勧めしますか? – vineet

+1

@vineetsah、私はしばらくのうちにマングースを使用していない、私はちょうどこの特定の頭痛に対処して覚えています。つまり、あなたのスキーマは私には良く見えます。 – Josh

関連する問題