Mangosta: extendiendo esquemas

Actualmente tengo dos esquemas casi idénticos:

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},

});

Y

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},

});

Su única diferencia es en la validación: los usuarios no necesitan un nombre, apellido o teléfono. Sin embargo, los administradores deben tener estas propiedades definidas.

Desafortunadamente, el código anterior no es muy SECO, ya que son casi idénticos. Por eso me pregunto si es posible construir unadminSchema basado en eluserSchema. P.ej.:

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

Obviamente eso es solo pseudocódigo. ¿Es algo como esto posible?

Otra pregunta muy similar es si es posible crear un nuevo esquema basado en otro y agregarle algunas propiedades más. Por ejemplo:

var adminSchema = mongoose.Schema(userSchema);
    adminSchema.add(adminPower: Number);

Respuestas a la pregunta(8)

Su respuesta a la pregunta