Има 2 начина за актуализиране на документи в mongodb:
-
намерете документа, пренесете го на сървъра, променете го, след което го запазете обратно в mongodb.
-
просто дайте инструкция на mongodb да намери документ, да го промени; след това накрая, след като mongodb приключи, върнете резултата/грешката като обратно извикване.
Във вашия код вие смесвате и двата метода.
-
с user.save(), първо търсите в базата данни с user.findOne и я изтегляте на сървър (nodejs), сега тя живее в паметта на вашия компютър. след това можете ръчно да промените данните и накрая да ги запишете в mongodb с user. 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!' }); });
-
второто е да използвате User.findOneAndUpdate().. Това е за предпочитане, вместо user.findOne(), след това user.update(); тъй като тези основно търсят базата данни два пъти. първо за findOne() и потърсете отново за update()
Както и да е, вторият метод казва на mongodb да актуализира данните, без първо да ги доведе до сървъра. След това, само след като mongodb приключи с действието си, ще получите актуализирания файл (или грешка) като обратно извикване
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!' });
});