Det er fordi dokumentobjektet du får tilbage fra mongoose ikke får direkte adgang til egenskaberne. Den bruger prototypekæden og derfor hasOwnProperty
returnerer falsk (jeg forenkler dette meget).
Du kan gøre en af to ting:Brug toObject()
for at konvertere det til et almindeligt objekt, og så vil dine checks fungere som de er:
var userPOJO = User.toObject();
if ( !(userPOJO.hasOwnProperty('local') && userPOJO.local.hasOwnProperty('password')) ) {...}
ELLER du kan bare tjekke for værdier direkte:
if ( !(User.local && User.local.password) ) {...}
Da ingen af egenskaberne kan have en falsk værdi, burde det fungere til test, om de er udfyldt.
EDIT:En anden kontrol, jeg glemte at nævne, er at bruge Mongooses indbyggede get
metode:
if (!User.get('local.password')) {...}