MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Защо hasOwnProperty на модела mongoose връща false, когато свойството съществува?

Това е така, защото обектът на документа, който получавате от mongoose, няма директен достъп до свойствата. Той използва веригата от прототипи, следователно hasOwnProperty връща false (аз опростявам това значително).

Можете да направите едно от двете неща:да използвате toObject() за да го преобразувате в обикновен обект и тогава вашите проверки ще работят както е:

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

ИЛИ можете просто да проверите за стойности директно:

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

Тъй като нито един от свойствата не може да има фалшива стойност, той трябва да работи за тестване, ако са попълнени.

РЕДАКТИРАНЕ:Друга проверка, която забравих да спомена, е да използвате вградения в Mongoose get метод:

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Нуждаете се от решение за търсене на низ към objectID externalField

  2. Как да използвате повторно mongodb връзка чрез Promise

  3. Уникален индекс на Mongoose на поддокумента

  4. mongodb - Намерете документ с най-близката целочислена стойност

  5. Условна $sum в MongoDB