2013-11-02 4 views
3

У меня есть поле, которое будет один из двух объектов (либо хранящейся кредитной карты или данной кредитной карты):Mongoose ИЛИ Схема проверка

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 

Я знаю, что переданные данные собираются соответствовать одному из них , но не оба. Есть ли способ указать какую-либо конструкцию ИЛИ для проверки?

+0

Как данные передаются? Как вы определяете, что есть во время выполнения? – WiredPrairie

ответ

1

Вы не представили примеры своей схемы, но есть несколько способов проверки.

Единственное, что я сделал, было указано «смешанный» тип для схемы, позволяющий использовать любой тип для поля, которое может содержать любой тип.

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.

Смежные вопросы