如何在Mongoose的其他字段中创建可选字段?

时间:2016-11-21 05:59:28

标签: node.js mongodb

我想在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抛出ValidatorError: Path required错误。

1 个答案:

答案 0 :(得分:2)

不是将required设置为true,而是将其设置为仅在需要时才返回true的函数。

这应该可以解决问题:

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'; }
      }
    }
});