Dzieje się tak, ponieważ obiekt dokumentu, który otrzymujesz z mangusty, nie ma bezpośredniego dostępu do właściwości. Używa łańcucha prototypów, stąd hasOwnProperty
zwracając false (bardzo to upraszczam).
Możesz zrobić jedną z dwóch rzeczy:użyj toObject()
przekonwertować go na zwykły obiekt, a wtedy twoje sprawdzenia będą działać tak, jak są:
var userPOJO = User.toObject();
if ( !(userPOJO.hasOwnProperty('local') && userPOJO.local.hasOwnProperty('password')) ) {...}
LUB możesz po prostu sprawdzić wartości bezpośrednio:
if ( !(User.local && User.local.password) ) {...}
Ponieważ żadna z właściwości nie może mieć fałszywej wartości, powinna działać podczas testowania, jeśli są wypełnione.
EDYCJA:Inną kontrolą, o której zapomniałem wspomnieć, jest użycie wbudowanego get
Mongoose metoda:
if (!User.get('local.password')) {...}