Der er 2 måder at opdatere dokumenter på i mongodb:
-
find dokumentet, bring det til serveren, skift det, og gem det derefter tilbage til mongodb.
-
bare giv instruktion til mongodb for at finde dokument, ændre det; så til sidst efter mongodb er færdig, returner resultatet/fejlen som tilbagekald.
I din kode blander du begge metoder.
-
med user.save(), først søger du i databasen med user.findOne, og trækker den til server(nodejs), nu bor den i din computers hukommelse. derefter kan du manuelt ændre dataene og til sidst gemme dem til mongodb med bruger. gem()
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!' }); });
-
den anden er at bruge User.findOneAndUpdate().. Dette foretrækkes i stedet for user.findOne() og derefter user.update(); fordi de grundlæggende søger i databasen to gange. først for at findeOne(), og søg igen for at opdatere()
Anyway, den anden metode fortæller mongodb at opdatere dataene uden først at bringe dem til serveren. Dernæst, først efter at mongodb er færdig med sin handling, vil du modtage den opdaterede fil (eller fejl) som tilbagekald
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!' });
});