MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jeśli wartość właściwości jest pusta podczas aktualizacji, wówczas ta właściwość nie powinna być dodawana do rekordu

Nie napisałbym tego w ten sposób, ale powiem Ci, dlaczego Twój kod zawodzi.

Problemem jest twój $set block

Wybierasz konkretnie ustawienie wartości przekazanego obiektu aktualizacji. Jeśli wartość jest undefined zmuszasz mongo do ustawienia tego na null .

Oto problem

na przykład w DB:

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

JEŚLI zdasz w testToUpdate = { name: 'foo' } skończysz z

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

ponieważ otrzymujesz updatedValues.nickname poza argumentami i to nie jest zdefiniowane

Czego chcesz jest

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

który jest tłumaczony na

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

Nie dostarczasz już klucza dla pseudonimu, dlatego nie ustawiasz go na undefined/null.

Użyłbym wtyczki mongoose i nie martwię się o ręczne przekazywanie pól aż do twojego modelu (patrz github.com/autolotto/mongoose-model-update )

  • Możesz zdefiniować pola, które można aktualizować, a następnie możesz po prostu wykonać model.update(req.body) i nie martw się tym wszystkim
  • Nawet jeśli nie chcesz używać wtyczki, nadal możesz po prostu wykonać Test.findByIdAndUpdate(id, { name, nickname }, callback)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Użyj zmiennej javascript jako wartości $regex w zapytaniu MongoDB

  2. Mongodb agreguje, grupuje i zlicza instancje

  3. MongoDB+Java:Brak poświadczeń w dokumencie użytkownika

  4. Agregat Pymongo:filtruj według liczby pól (dynamiczny)

  5. Fragmenty MongoDB i serwery konfiguracyjne na tym samym serwerze?