sql >> Database >  >> NoSQL >> MongoDB

Als de waarde van een eigenschap null is bij het bijwerken, moet die eigenschap niet aan het record worden toegevoegd

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


  1. groepen per maand en jaar met behulp van mongoose.js

  2. mgo - queryprestaties lijken constant traag (500-650ms)

  3. Hoe kan ik het MongoDB-stuurprogramma gebruiken met C# ASP.NET Core API-framework?

  4. Redis-beheerpaneel