Itu karena objek dokumen yang Anda dapatkan dari luwak tidak mengakses properti secara langsung. Ini menggunakan rantai prototipe karenanya hasOwnProperty
mengembalikan false (saya sangat menyederhanakan ini).
Anda dapat melakukan salah satu dari dua hal:gunakan toObject()
untuk mengubahnya menjadi objek biasa dan kemudian cek Anda akan berfungsi apa adanya:
var userPOJO = User.toObject();
if ( !(userPOJO.hasOwnProperty('local') && userPOJO.local.hasOwnProperty('password')) ) {...}
ATAU Anda bisa langsung memeriksa nilainya:
if ( !(User.local && User.local.password) ) {...}
Karena tidak ada properti yang memiliki nilai falsy, maka properti tersebut harus berfungsi untuk pengujian jika diisi.
EDIT:Pemeriksaan lain yang saya lupa sebutkan adalah menggunakan get
. bawaan Mongoose metode:
if (!User.get('local.password')) {...}