sql >> Databasteknik >  >> NoSQL >> MongoDB

Om värdet på en egenskap är null vid uppdatering ska den egenskapen inte läggas till i posten

Jag skulle inte skriva så här, men jag ska berätta varför din kod misslyckas.

Problemet är ditt $set-block

Du väljer att specifikt ställa in värdet för uppdateringsobjektet som skickas in. Om värdet är undefined du tvingar mongo att ställa in det på null .

Här är problemet

till exempel i DB:

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

OM du skickar in testToUpdate = { name: 'foo' } du kommer att sluta med

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

eftersom du får updatedValues.nickname bort från argumenten och det är inte definierat

Vad du vill ha är

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

som är översatt till

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

Du tillhandahåller inte längre en nyckel för smeknamn, vilket gör det inte inställt på undefined/null.

Jag skulle använda ett mongoose-plugin och inte oroa mig för att manuellt skicka fälten hela vägen till din modell (se github.com/autolotto/mongoose-model-update )

  • Du kan definiera de uppdateringsbara fälten och sedan kan du bara göra model.update(req.body) och oroa dig inte för allt detta
  • Även om du inte vill använda plugin-programmet kan du fortfarande göra Test.findByIdAndUpdate(id, { name, nickname }, callback)


  1. Hantera anslutning till redis från Python

  2. MongoDB Java API:Skillnaden mellan com.mongodb.DBCollection.Save() och com.mongodb.DBCollection.Insert()?

  3. Bästa Session Storage Middleware för Express + MongoDB

  4. Hur man analyserar diskanvändning av en Docker-behållare