sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvis værdien af ​​en ejendom er nul ved opdatering, skal den pågældende egenskab ikke føjes til posten

Jeg ville ikke skrive dette på denne måde, men jeg vil fortælle dig, hvorfor din kode fejler.

Problemet er din $set blok

Du vælger specifikt at indstille værdien til opdateringsobjektet, der er sendt ind. Hvis værdien er undefined du tvinger mongo til at sætte det til null .

Her er problemet

eksempel i DB:

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

HVIS du sender testToUpdate = { name: 'foo' } du ender med

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

fordi du får updatedValues.nickname ud af argumenterne og det er ikke defineret

Hvad du ønsker er

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

som er oversat til

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

Du angiver ikke længere en nøgle til kaldenavn, og gør det derfor ikke indstillet til undefined/null.

Jeg ville bruge et mongoose plugin og ikke bekymre mig om manuelt at sende felterne hele vejen til din model (se github.com/autolotto/mongoose-model-update )

  • Du kan definere de felter, der kan opdateres, og derefter kan du bare gøre model.update(req.body) og ikke bekymre dig om alt dette
  • Selv hvis du ikke vil bruge pluginnet, kan du stadig bare gøre Test.findByIdAndUpdate(id, { name, nickname }, callback)


  1. MongoDB:Kunne ikke opsætte sockets under opstart

  2. MongoDB - Forespørgsel mellem et tidsinterval på timer

  3. få alle dokumenter med maksimal værdi ved hjælp af aggregering i mongodb

  4. Henter første dag i ugen fra ugenummer i mongodb