sql >> Databáze >  >> NoSQL >> MongoDB

Pokud je při aktualizaci hodnota vlastnosti null, pak by tato vlastnost neměla být přidána do záznamu

Nepsal bych to tímto způsobem, ale řeknu vám, proč váš kód selhává.

Problém je ve vašem $set block

Rozhodli jste se konkrétně nastavit hodnotu předávanému objektu aktualizace. Pokud je hodnota undefined nutíte mongo, aby to nastavil na null .

Zde je problém

například v DB:

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

POKUD zadáte testToUpdate = { name: 'foo' } skončíte s

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

protože získáváte updatedValues.nickname mimo argumenty a to není definováno

Co chcete je

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

což je přeloženo do

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

Již neposkytujete klíč pro přezdívku, takže ji nenastavíte na undefined/null.

Použil bych plugin mongoose a nestaral bych se o ruční předávání polí až k vašemu modelu (viz github.com/autolotto/mongoose-model-update )

  • Můžete definovat pole s možností aktualizace a poté stačí provést model.update(req.body) a nestarejte se o to všechno
  • I když plugin nechcete používat, stále můžete provést Test.findByIdAndUpdate(id, { name, nickname }, callback)


  1. Jak načíst podmnožinu polí pomocí ovladače C# MongoDB?

  2. Aktualizujte/odstraňte dílčí dokument v mongodb pomocí ovladače C#

  3. Nasazení MongoDB pomocí Dockeru

  4. Spring - mongodb - aggregation - Je vyžadována volba 'kurzor'