Mongoose OR 模式验证

Posted

技术标签:

【中文标题】Mongoose OR 模式验证【英文标题】:Mongoose OR schema validation 【发布时间】:2013-11-13 17:59:46 【问题描述】:

我有一个字段,它将是两个对象之一(存储的信用卡或给定的信用卡):

  payment_method:
    cc_token: String
    security_code: String
  payment_method:
    number: String
    security_code: String
    expiration_month: Number
    expiration_year: Number
    billing_address: 
      _type: String
      first_name: String 
      last_name: String
      address_line1: String
      address_line2: String
      zip_code: String
      city: String 
      state: String
      phone_number: String

我知道传递的数据将匹配其中之一,但不会同时匹配两者。有没有办法为验证指定某种 OR 构造?

【问题讨论】:

数据如何“通过”?在运行时如何确定哪个是哪个? 【参考方案1】:

您没有提供包含架构的示例,但是有多种验证方法。

我做的一件事是为 Schema 指定“混合”类型,允许将任何类型用于可能包含任一类型的字段。

function validatePaymentMethod(value) 
  if (!value)  return false; 
  // put some logic that checks for valid types here...
  if (value.cc_token && value.billing_address)  
    return false;
  
  return true;


var OrderSchema = new mongoose.Schema(
   payment_method :  type:  mongoose.Schema.Types.Mixed, 
                  validate: [validatePaymentMethod, 'Not valid payment method'] 
);

var Order = mongoose.model("Order", OrderSchema);
var o = new Order();
o.payment_method =  cc_token: 'abc', billing_address: 'Street' ;
o.validate(function(err) 
   console.log(err);
);

其他的记录在here。

【讨论】:

以上是关于Mongoose OR 模式验证的主要内容,如果未能解决你的问题,请参考以下文章

利用Mongoose来结构化模式与验证

Mongoose 模式验证不适用于 Fawn

针对 Mongoose 模式验证对象而不保存为新文档

在 Mongoose 模式验证中执行查询

Mongoose 模式:验证唯一字段,不区分大小写

Mongoose 模式:验证唯一字段,不区分大小写