Er zijn 2 manieren om documenten in mongodb bij te werken:
-
zoek het document, breng het naar de server, wijzig het en sla het weer op in mongodb.
-
geef gewoon instructie aan mongodb om het document te vinden, verander het; en tenslotte, nadat Mongodb klaar is, retourneer je het resultaat/de fout als callback.
In je code mix je beide methoden.
-
met user.save(), zoek je eerst in de database met user.findOne, en trek je het naar server(nodejs), nu leeft het in je computergeheugen. Daarna kun je de gegevens handmatig wijzigen en uiteindelijk opslaan in mongodb met gebruiker. opslaan()
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!' }); });
-
de tweede is om User.findOneAndUpdate() te gebruiken. Dit heeft de voorkeur, in plaats van user.findOne() dan user.update(); omdat degenen die de database in feite twee keer doorzoeken. eerst naar findOne(), en zoek opnieuw om te updaten()
Hoe dan ook, de tweede methode vertelt mongodb om de gegevens bij te werken zonder eerst naar de server te brengen. Vervolgens, pas nadat mongodb klaar is met zijn actie, ontvangt u het bijgewerkte bestand (of fout) als callback
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!' });
});