Otra forma de manejar esto en el nivel de esquema es anular a JSON para el modelo.
UserSchema.methods.toJSON = function() {
var obj = this.toObject()
delete obj.passwordHash
return obj
}
Encontré esta pregunta buscando una forma de excluir el hash de contraseña del json que entregué al cliente, y select: false
rompió mi función de verificar contraseña porque no recuperó el valor de la base de datos en absoluto.