我正在尝试根据当前Mongoose对象中的值创建所需的字段。 如何使customerInfo需要取决于下面状态的值?
此引用不适用于该功能。
理想情况下,我更愿意在模式定义之外声明函数,但无法使其工作。我也找不到关于该功能的文档来提供所需的支持功能,但我很确定它支持...
var OrderSchema = new Schema(
{
status: {
type: String,
trim: true,
enum: refdata.orderStatus,
default: refdata.orderStatus[0]
},
createDate: {
type: Date,
default: Date.now
},
customerInfo: {
type: OrderCustomer,
required: function (v){
return this.status === 'INIT';
}
}
}
答案 0 :(得分:1)
您可以使用pre
中间件实现您想要的目标。
有关pre
的详情,请参阅Mongoose middleware documentation
在pre
时使用saving
并应用logic
来检查是否需要特定字段。根据您在pre('save')
中实施的逻辑,如果是required
或not required
,则可以在任何一种情况下标记错误。
尝试这样的事情:
var OrderSchema = new Schema(..);
OrderSchema.pre('save', function(next) {
// check if it is required or not
if(this.status == "INIT")
{
//customerInfo Required
//check if customerInfo is present or not.
// Flag issue if not present.
var err = new Error('customerInfo required');
next(err);
}
next();
});