2014-07-24 13 views
18

Ich habe ein Benutzerschema mit Mungo in NodeJS wie dieseMongoose Schema optionale Felder

userschema = mongoose.Schema({ 
    org: String, 
    username: String, 
    fullname: String, 
    password: String, 
    email: String 
}); 

Außer manchmal brauche ich einige weitere Felder hinzuzufügen.

Die Hauptfrage ist: Kann ich optionale Felder in einem Monogoose-Schema haben?

Antwort

31

Alle Felder in einem Mungoschema sind standardmäßig optional (neben _id, natürlich).

Ein Feld ist nur erforderlich, wenn Sie seiner Definition required: true hinzufügen.

Definieren Sie also Ihr Schema als Obermenge aller möglichen Felder und fügen Sie den erforderlichen Feldern required: true hinzu.

+2

Ist es möglich, 'einzustellen erforderlich: true' auf ein paar Felder, wenn und nur wenn ein drittes Feld' erforderlich ist: true'? Der Anwendungsfall dafür ist ziemlich üblich ... z.B. "stundaryRate" und "endDate" sind nur erforderlich, wenn "isContractor" ein erforderliches Feld ist. –

19

Neben optional (default) und erforderlich ist, kann ein Feld erforderlich bedingt, basierend auf einer oder mehreren der anderen Felder vorliegen.

Zum Beispiel benötigt Passwort nur, wenn E-Mail vorhanden ist:

var userschema = mongoose.Schema({ 
    org: String, 
    username: String, 
    fullname: String, 
    password: { 
     type: String, 
     required: function(){ 
      return this.email? true : false 
     } 
    }, 
    email: String 
});