我使用带有三个字段的Mongoose进行了架构设置。其中没有一个是必需的,但我想确保填充三个字段中的至少一个以防止保存空文档(理想情况下,我希望确保至少first
或second
字段已填充)。最好的方法是什么? pre('save')
看起来像一个选项,但认为应该有一个内置的方法来做到这一点。
var mySchema = new Schema({
first: {
type: String,
trim: true
},
second: {
type: String,
trim: true
},
third: {
type: Number,
min: 1
}
}, {
timestamps: true
});
var My = mongoose.model('My', mySchema);
答案 0 :(得分:0)
如上所述,您可以pre('save')
或在一个字段上使用validation
来检查此情况,如下所示。
var validateLocalStrategyProperty = function(property) {
return this.first || this.second || this.third);
};
var mySchema = new Schema({
first: {
type: String,
trim: true,
validate: [validateLocalStrategyProperty, 'Please fill at least one field']
},
second: {
type: String,
trim: true
},
third: {
type: Number,
min: 1
}
}, {
timestamps: true
});
var My = mongoose.model('My', mySchema);
答案 1 :(得分:0)
Pre方法最适合这种用例。
mySchema.pre('save', function(next) {
var self = this;
if(self.first || self.second || self.third) {
next();
} else {
next(new Error('At leat one of the filed should be there'))
}
}
您还引入了一个中间件,它将验证您的请求并在路由中调用下一个函数。
答案 2 :(得分:-1)
您可以为字段输入为空时使用的字段设置默认值。
var mySchema = new Schema({
first: {
type: String,
trim: true,
default: 'your string or something'
},
second: {
type: String,
trim: true,
default: 'your string or something'
},
third: {
type: Number,
min: 1
}
}, {
timestamps: true
});
var My = mongoose.model('My', mySchema);