É porque o objeto de documento que você recebe do mangusto não acessa as propriedades diretamente. Ele usa a cadeia de protótipos, portanto,
hasOwnProperty
retornando false (estou simplificando muito isso). Você pode fazer uma de duas coisas:usar
toObject()
para convertê-lo em um objeto simples e, em seguida, suas verificações funcionarão como estão:var userPOJO = User.toObject();
if ( !(userPOJO.hasOwnProperty('local') && userPOJO.local.hasOwnProperty('password')) ) {...}
OU você pode apenas verificar os valores diretamente:
if ( !(User.local && User.local.password) ) {...}
Como nenhuma das propriedades pode ter um valor falso, deve funcionar para testar se elas forem preenchidas.
EDIT:Outra verificação que esqueci de mencionar é usar o
get
embutido do Mongoose método:if (!User.get('local.password')) {...}