如何根据猫鼬中的其他字段制作可选字段?

vin*_*eet 3 mongodb node.js

我想在 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
        }
    }
}); 
Run Code Online (Sandbox Code Playgroud)

我想Log使用{logType:'user',userLog:{userId:'5fcJFjslkka4lsdk'}}或将文档插入上述架构中{logType:'lead',leadLog:{leadId:'5fcJFjslkka4lsdk'}}

但此时猫鼬抛出 ValidatorError: Path required错误。

Jos*_*osh 7

您可以将其设置requiredtrue仅在需要时才返回 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'; }
      }
    }
});
Run Code Online (Sandbox Code Playgroud)