sql >> Databasteknik >  >> NoSQL >> MongoDB

Varför returnerar mongoosemodellens hasOwnProperty falskt när egenskapen existerar?

Det beror på att dokumentobjektet du får tillbaka från mongoose inte kommer åt egenskaperna direkt. Den använder prototypkedjan och därför hasOwnProperty returnerar falskt (jag förenklar detta avsevärt).

Du kan göra en av två saker:använd toObject() för att konvertera det till ett vanligt objekt och sedan kommer dina checkar att fungera som de är:

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

ELLER så kan du bara kolla efter värden direkt:

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

Eftersom ingen av egenskaperna kan ha ett falskt värde bör det fungera för testning om de är ifyllda.

EDIT:En annan kontroll som jag glömde att nämna är att använda Mongooses inbyggda get metod:

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


  1. MassTransit saga med Redis persistens ger Method Accpet har inget undantag för implementering

  2. Paginering med MongoDB

  3. Model.find().toArray() påstår sig inte ha .toArray()-metoden

  4. Pålitliga bibliotek där ute för Spring boot redis-integreringstest