Existují 2 způsoby, jak aktualizovat dokumenty v mongodb:
-
najděte dokument, přeneste jej na server, změňte jej a poté jej uložte zpět do mongodb.
-
stačí dát pokyn mongodb najít dokument, změnit jej; poté, co je mongodb hotový, vraťte výsledek/chybu jako zpětné volání.
Ve svém kódu kombinujete obě metody.
-
s user.save(), nejprve prohledáte databázi pomocí user.findOne a stáhnete ji na server(nodejs), nyní žije v paměti vašeho počítače. Pak můžete ručně změnit data a nakonec je uložit do mongodb s uživatelem. save()
User.findOne({ userName: req.params.userName}, function(err, user) { if (err) res.send(err); //this user now lives in your memory, you can manually edit it user.username = "somename"; user.competitorAnalysis.firstObservation = "somethingelse"; // after you finish editing, you can save it to database or send it to client user.save(function(err) { if (err) return res.send(err); return res.json({ message: 'User updated!' }); });
-
druhý je použít User.findOneAndUpdate().. Toto je preferováno, místo user.findOne() pak user.update(); protože ti v podstatě prohledávají databázi dvakrát. nejprve findOne() a znovu hledejte update()
Každopádně druhá metoda říká mongodb, aby aktualizoval data bez předchozího přenesení na server. Dále, teprve poté, co mongodb dokončí svou akci, obdržíte aktualizovaný soubor (nebo chybu) jako zpětné volání
User.findOneAndUpdate({ userName: req.params.userName},
{
$set: { "competitorAnalysis.firstObservation" : req.body.firstObservation,
"competitorAnalysis.secondObservation" : req.body.secondObservation,
"competitorAnalysis.thirdObservation" : req.body.thirdObservation,
"competitorAnalysis.brandName" : req.body.brandName,
"competitorAnalysis.productCategory" : req.body.productCategory
} },
{ upsert: true },
function(err, user) {
//after mongodb is done updating, you are receiving the updated file as callback
// now you can send the error or updated file to client
if (err)
res.send(err);
return res.json({ message: 'User updated!' });
});