No nível do caminho de e-mail, você pode usar apenas:
email: {
type: String
}
E no nível do esquema use:
SchemaName.index({ email: 1 }, {
unique: true,
partialFilterExpression: {
'email': { $exists: true, $gt: '' }
}
});
Dessa forma, a restrição exclusiva é aplicada somente se o email existir e não for uma string vazia