Nel livello del percorso email, puoi utilizzare solo:
email: {
type: String
}
E nel livello di schema usa:
SchemaName.index({ email: 1 }, {
unique: true,
partialFilterExpression: {
'email': { $exists: true, $gt: '' }
}
});
In questo modo il vincolo univoco viene applicato solo se l'email esiste e non è una stringa vuota