Ik zou dit niet op deze manier schrijven, maar ik zal je vertellen waarom je code niet werkt.
Het probleem is je $set-blok
U kiest ervoor om de waarde specifiek in te stellen op het doorgegeven update-object. Als de waarde undefined
is je dwingt Mongo om dat in te stellen op null
.
Dit is het probleem
voorbeeld, in DB:
{
"_id" : ObjectId("ns8f9yyuo32hru0fu23oh"),
"name" : "firstTest",
"nickname": "jack",
"__v" : 0
}
ALS je slaagt in testToUpdate = { name: 'foo' }
je zult eindigen met
Test.update({ ... }, { $set: { name: 'foo', nickname: undefined }}
omdat je updatedValues.nickname
. krijgt buiten de argumenten en dat is niet gedefinieerd
Wat je wilt is
Test.update({ ... }, { $set: updatedValues }
wat wordt vertaald naar
Test.update({ ... }, { $set: { name: 'foo' } }
Je geeft niet langer een sleutel voor bijnaam op, waardoor deze niet op undefined/null staat.
Ik zou een mangoest-plug-in gebruiken en me geen zorgen maken over het handmatig doorgeven van de velden helemaal naar je model (zie github.com/autolotto/mongoose-model-update )
- U kunt de velden die kunnen worden bijgewerkt definiëren en vervolgens kunt u gewoon
model.update(req.body)
doen en maak je geen zorgen over dit alles - Zelfs als je de plug-in niet wilt gebruiken, kun je gewoon
Test.findByIdAndUpdate(id, { name, nickname }, callback)
doen