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

Ако стойността на дадено свойство е нулева при актуализиране, това свойство не трябва да се добавя към записа

Не бих написал това по този начин, но ще ви кажа защо вашият код е неуспешен.

Проблемът е вашият $set блок

Вие избирате конкретно да зададете стойността на обекта за актуализация, който е предаден. Ако стойността е undefined вие принуждавате mongo да зададе това на null .

Ето го проблемът

например в DB:

{
    "_id" : ObjectId("ns8f9yyuo32hru0fu23oh"),
    "name" : "firstTest",
    "nickname": "jack",
    "__v" : 0
}

АКО подадете testToUpdate = { name: 'foo' } ще завършите с

 Test.update({ ... }, { $set: { name: 'foo', nickname: undefined }}

защото получавате updatedValues.nickname извън аргументите и това не е дефинирано

Това, което искатете е

Test.update({ ... }, { $set: updatedValues }

което се превежда на

Test.update({ ... }, { $set: { name: 'foo' } }

Вече не предоставяте ключ за псевдоним, като по този начин не го настройвате на undefined/null.

Бих използвал приставка за mongoose и няма да се тревожа за ръчно предаване на полетата до вашия модел (вижте github.com/autolotto/mongoose-model-update )

  • Можете да дефинирате полетата с възможност за актуализиране и след това можете просто да направите model.update(req.body) и не се тревожете за всичко това
  • Дори и да не искате да използвате приставката, пак можете просто да направите Test.findByIdAndUpdate(id, { name, nickname }, callback)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Предупреждение при свързване към MongoDB с Node сървър

  2. ускорете обработката на голям набор от резултати с помощта на rmongodb

  3. Свържете се с mongodb, работещ в Docker

  4. Mongo дава грешка с дублиран ключ в полето _id_ в приложението Meteor

  5. Уникалният индекс на Mongo не е чувствителен към малки и големи букви