Ada 2 cara untuk mengupdate dokumen di mongodb:
-
temukan dokumennya, bawa ke server, ubah, lalu simpan kembali ke mongodb.
-
berikan instruksi ke mongodb untuk menemukan dokumen, ubah; lalu akhirnya setelah mongodb selesai, kembalikan hasil/kesalahan sebagai panggilan balik.
Dalam kode Anda, Anda mencampur kedua metode.
-
dengan user.save(), pertama Anda mencari database dengan user.findOne, dan tarik ke server(nodejs), sekarang tinggal di memori komputer Anda.kemudian Anda dapat secara manual mengubah data dan akhirnya menyimpannya ke mongodb dengan pengguna. simpan()
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!' }); });
-
yang kedua adalah menggunakan User.findOneAndUpdate().. Ini lebih disukai, daripada user.findOne() lalu user.update(); karena mereka pada dasarnya mencari database dua kali. pertama ke findOne(), dan cari lagi ke update()
Bagaimanapun, metode kedua memberitahu mongodb untuk memperbarui data tanpa terlebih dahulu membawa ke server, Selanjutnya, hanya setelah mongodb selesai dengan tindakannya, Anda akan menerima file yang diperbarui (atau kesalahan) sebagai panggilan balik
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!' });
});