2017-07-03 2 views
0

Ich habe eine PUT-Route, um den Wert zu aktualisieren. Ich treffe diesen Weg von zwei Orten. Man sendet Informationen über Details und eine über abgeschlossen. Das Problem ist, dass Mungo Stand aktualisiert, obwohl es Wert von nur einem bekommt.Mongoose aktualisieren nur die Werte, die sich geändert haben

Also, wenn ich Informationen über abgeschlossen, dass es wahr ist, und letztere ich trete diese Route mit neuen Details (die nicht abgeschlossen Wert haben) wird es auch abgeschlossen auf falsch aktualisiert. Wie aktualisiere ich nur den Wert, der geändert wurde?

router.put('/:id', (req, res) => { 
    Todo.findOne({_id:req.body.id}, (err, foundObject) => { 
     foundObject.details = req.body.details 
     foundObject.completed = req.body.completed 
    foundObject.save((e, updatedTodo) => { 
     if(err) { 
     res.status(400).send(e) 
     } else { 
     res.send(updatedTodo) 
     } 
    }) 
    }) 
}) 

EDIT: Dank Jackson Hinweis wurde ich schaffte es, wie dies zu tun.

router.put('/:id', (req, res) => { 
    Todo.findOne({_id:req.body.id}, (err, foundObject) => { 
    if(req.body.details !== undefined) { 
     foundObject.details = req.body.details 
    } 
    if(req.body.completed !== undefined) { 
     foundObject.completed = req.body.completed 
    } 
    foundObject.save((e, updatedTodo) => { 
     if(err) { 
     res.status(400).send(e) 
     } else { 
     res.send(updatedTodo) 
     } 
    }) 
    }) 
}) 
+0

Wenn Sie ein Dokument aktualisieren, [Update] (http://mongoosejs.com/docs/api.html#model_Model.update) es, speichere es nicht. –

Antwort

1
const updateQuery = {}; 

if (req.body.details) { 
    updateQuery.details = req.body.details 
} 

if (req.body.completed) { 
    updateQuery.completed = req.body.completed 
} 

//or 
Todo.findOneAndUpdate({id: req.body.id}, updateQuery, {new: true}, (err, res) => { 
    if (err) { 

    } else { 

    } 
}) 

//or 
Todo.findOneAndUpdate({id: req.body.id}, {$set: updateQuery}, {new: true}, (err, res) => { 
    if (err) { 

    } else { 

    } 
}) 
+0

Danke Jackson. Ich habe es geschafft. Nur zu überprüfen, ob (req.body.completed) nicht funktionierte, war falsch und ich musste es in true ändern. Stattdessen habe ich if verwendet (req.body.completed! == undefined) –

+0

ja, ich verpasste null, falsch, 0 :) – Jackson

Verwandte Themen