MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Pourquoi hasOwnProperty du modèle mongoose renvoie-t-il false lorsque la propriété existe?

C'est parce que l'objet document que vous récupérez de mongoose n'accède pas directement aux propriétés. Il utilise la chaîne prototype d'où hasOwnProperty renvoyant false (je simplifie grandement cela).

Vous pouvez faire l'une des deux choses :utiliser toObject() pour le convertir en un objet simple et vos vérifications fonctionneront telles quelles :

var userPOJO = User.toObject();
if ( !(userPOJO.hasOwnProperty('local') && userPOJO.local.hasOwnProperty('password')) ) {...}

OU vous pouvez simplement vérifier les valeurs directement :

if ( !(User.local && User.local.password) ) {...}

Étant donné qu'aucune des propriétés ne peut avoir une valeur fausse, cela devrait fonctionner pour les tests si elles sont renseignées.

EDIT :une autre vérification que j'ai oublié de mentionner consiste à utiliser get intégré à Mongoose méthode :

if (!User.get('local.password')) {...}