Outra maneira de lidar com isso no nível do esquema é substituir toJSON para o modelo.
UserSchema.methods.toJSON = function() {
var obj = this.toObject()
delete obj.passwordHash
return obj
}
Me deparei com esta pergunta procurando uma maneira de excluir o hash de senha do json que servi para o cliente e
select: false
quebrou minha função VerifyPassword porque não recuperou o valor do banco de dados.