Mangouste: l'extension des schémas

Actuellement, j'ai deux presque identique schémas:

var userSchema = mongoose.Schema({

    email: {type: String, unique: true, required: true, validate: emailValidator},
    passwordHash: {type: String, required: true},

    firstname: {type: String, validate: firstnameValidator},
    lastname: {type: String, validate: lastnameValidator},
    phone: {type: String, validate: phoneValidator},

});

Et

var adminSchema = mongoose.Schema({

    email: {type: String, unique: true, required: true, validate: emailValidator},
    passwordHash: {type: String, required: true},

    firstname: {type: String, validate: firstnameValidator, required: true},
    lastname: {type: String, validate: lastnameValidator, required: true},
    phone: {type: String, validate: phoneValidator, required: true},

});

Leur seule différence est dans la validation: les Utilisateurs n'ont pas besoin d'un firstname, lastname ou par téléphone. Les Admins doivent cependant avoir ces propriétés définies.

Malheureusement le code ci-dessus n'est pas très SEC, comme ils sont presque identiques. Donc je me demandais si il est possible de construire un adminSchema basé sur la userSchema. E. g.:

var adminSchema = mongoose.Schema(userSchema);
adminSchema.change('firstname', {required: true});
adminSchema.change('lastname', {required: true});
adminSchema.change('phone', {required: true});

Évidemment que c'est juste de pseudo-code. Est quelque chose comme cela possible?

Un autre très semblable question est de savoir si il est possible de créer un nouveau schéma basé sur un autre, et ajouter plus de propriétés. Par exemple:

var adminSchema = mongoose.Schema(userSchema);
    adminSchema.add(adminPower: Number);
Et les gens déjà le faire github.com/briankircho/mongoose-schema-extend voir ce.

OriginalL'auteur Tom | 2013-08-19