MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Por que o hasOwnProperty do modelo mangusto retorna false quando a propriedade existe?


É 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')) {...}