使所需字段的正确语法依赖于Mongoose中的另一个字段/函数

时间:2016-09-06 12:46:33

标签: mongoose

我正在尝试根据当前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';
      }
    } 
}

1 个答案:

答案 0 :(得分:1)

您可以使用pre中间件实现您想要的目标。

有关pre的详情,请参阅Mongoose middleware documentation

pre时使用saving并应用logic来检查是否需要特定字段。根据您在pre('save')中实施的逻辑,如果是requirednot 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();
});