Istnieją 2 sposoby aktualizowania dokumentów w mongodb:
-
znajdź dokument, przynieś go na serwer, zmień go, a następnie zapisz z powrotem w mongodb.
-
po prostu wydaj polecenie mongodb, aby znalazł dokument, zmień go; następnie po zakończeniu mongodb zwróć wynik/błąd jako wywołanie zwrotne.
W swoim kodzie mieszasz obie metody.
-
za pomocą user.save() najpierw przeszukujesz bazę danych za pomocą user.findOne i ściągasz ją na serwer (nodejs), teraz żyje w pamięci twojego komputera. Następnie możesz ręcznie zmienić dane i ostatecznie zapisać je w mongodb za pomocą user. zapisz()
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!' }); });
-
drugi to użycie User.findOneAndUpdate(). Jest to preferowane zamiast user.findOne(), a następnie user.update(); ponieważ w zasadzie przeszukują bazę dwa razy. najpierw findOne() i ponownie wyszukaj update()
W każdym razie, drugą metodą jest nakazanie mongodb aktualizacji danych bez uprzedniego przeniesienia ich na serwer. Następnie, dopiero po zakończeniu akcji przez mongodb, otrzymasz zaktualizowany plik (lub błąd) jako wywołanie zwrotne
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!' });
});