sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvorfor returnerer mongoose-modellens hasOwnProperty falsk, når egenskaben eksisterer?

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


  1. Flere nøgler, der peger på en enkelt værdi i Redis (Cache) med java

  2. Returner den sidste sande værdi for hver gruppe

  3. Flet to array-felter i mongoDB

  4. Mongodb Forøg værdi inde i indlejret array