2016-05-03 7 views
9

mam tę strukturę:Jak dodać schemat warunkowy na podstawie innego pola?

{ 
    personFullName: String, 
    personMobileOS: Number // 1 = IOS, 2 = Android, 
    moreDetails: Mixed 
} 

chcę dodać schematu warunkowego na podstawie innej dziedzinie jak ten:

if (personMobileOS === 1) { // IOS 
    moreDetails = { 
     iosVersion: Number, 
     loveApple: Boolean 
    } 
} else if (personMobileOS === 2) { // Android 
    moreDetails = { 
     wantToSell: Boolean, 
     wantToSellPrice: Number 
     wantToSellCurrency: Number // 1 = Dollar, 2 = Euro, 3 = Pound 
    } 
} 

Jak widać, schemat dla „moreDetails” jest warunkowa, to możliwe osiągnąć to w mangurze?

+0

Zobacz http://mongoosejs.com/docs/validation.html#update- validators-and-this – str

+0

@str nie jest to dla mnie wystarczające, ponieważ chcę być w stanie podłączyć schematu (i cieszyć się korzyściami schematów mangusty), zamiast wykonywać walidację przez siebie. –

+0

O ile mi wiadomo, tworzenie dynamicznych schematów nie jest możliwe tak, jak tego chcesz. Więc niestandardowe sprawdzanie poprawności jest Twoją jedyną opcją. – str

Odpowiedz

2

Nie jestem pewien, czy jest za późno na to, ale myślę, że to, czego potrzebujesz, to mongoose subdocument discriminator. To pozwoli ci mieć 2 różne schematy na poddokumentach, mangusta zajmie się mapowaniem schematu, uwzględni walidację.

Tak, to, co należy zarchiwizować w tym pytaniu, to długotrwały problem, który został zażądany od czasu wersji 3.0 programu Mongoose. A teraz to oficjalne :)

Przykładem z nowym mangusta dokument podrzędny dyskryminatora:

const eventSchema = new Schema({ message: String }, 
    { discriminatorKey: 'kind' }); 

const Event = mongoose.model('Event', eventSchema); 

const ClickedEvent = Event.discriminator('Clicked', new Schema({ 
    element: { 
    type: String, 
    required: true 
    } 
})); 

const PurchasedEvent = Event.discriminator('Purchased', new Schema({ 
    product: { 
    type: String, 
    required: true 
    } 
})); 

Also checkout this blog post więcej szczegółów

Powiązane problemy