2017-07-27 1 views
3

J'ai un schéma Mongoose Employee. Dans ce que je veux stocker un champ (numéro de téléphone) lié au bureau pour l'employé, seulement si il/elle est éligible à un poste, qui est seulement pour deux niveaux "senior" et "c-level".Mongoose nécessite un champ basé sur certaines valeurs enum d'un autre champ

Le schéma:

const mongoose = require('mongoose'); 
const Schema = mongoose.Schema; 
var EmployeeSchema = new Schema({ 
    name: String, 
    designation: String, 
    level: {type: String, enum: ["intern", "junior", "mid-level", "senior", "c-level"], required: true}, 
    phoneNo: {type: String, required: true}, 
    officePhoneNo: {type: String, required: true} // how to require only if the level is senior or c-level?, 

}); 

apprécie votre aide.

Merci

+1

Vous voulez un "validateur personnalisé". Une validation plus avancée est discutée dans le [manuel mongoose] (http://mongoosejs.com/docs/validation.html) –

+0

Merci @NeilLunn, je vais passer par le manuel :) –

Répondre

4

En Mongoose, vous pouvez passer une fonction dans required qui peut revenir true/false selon certaines conditions.

Il est également possible de dépendre required d'un champ sur d'autres champs, ce qui correspond à level dans votre cas. Autrement dit, vous pouvez éventuellement avoir besoin d'un champ. Voici comment:

const mongoose = require('mongoose'); 
const Schema = mongoose.Schema; 
const levels = ["intern", "junior", "mid-level", "senior", "c-level"]; 
const levelsEligibleForOffice = ["senior", "c-level"]; 

var EmployeeSchema = new Schema({ 
    name: String, 
    designation: String, 
    level: {type: String, enum: levels, required: true}, 
    phoneNo: {type: String, required: true}, 
    officePhoneNo: {type: String, required: isEligibleForOffice} 
}); 


function isEligibleForOffice(){ 
    if(levelsEligibleForOffice.indexOf(this.level) > -1){ //"this" contains the employee document at the time of required validation 
     return true; 
    } 
    return false; 
} 
+0

Merci @talha, ça a marché :) –