我想在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
错误。
答案 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'; }
}
}
});