Saya memiliki masalah yang belum pernah saya lihat sebelumnya dengan Mongoose findByIdAndUpdate tidak mengembalikan model yang benar di callback.
Berikut kodenya:
var id = args._id;
var updateObj = {updatedDate: Date.now()};
_.extend(updateObj, args);
Model.findByIdAndUpdate(id, updateObj, function(err, model) {
if (err) {
logger.error(modelString +':edit' + modelString +' - ' + err.message);
self.emit('item:failure', 'Failed to edit ' + modelString);
return;
}
self.emit('item:success', model);
});
Dokumen asli di db terlihat seperti ini:
{
_id: 1234
descriptors: Array[2],
name: 'Test Name 1'
}
UpdateObj masuk terlihat seperti ini:
{
_id: 1234
descriptors: Array[2],
name: 'Test Name 2'
}
Model yang dikembalikan dari callback identik dengan model asli, bukan updatedObj. Jika saya menanyakan db, itu telah diperbarui dengan benar. Itu hanya tidak dikembalikan dari database.
Ini terasa seperti kesalahan 'pengguna bodoh', tapi saya tidak bisa melihatnya. Setiap ide sangat dihargai.
Jawaban:
Dalam Mongoose 4.0, nilai default untuk
new
opsifindByIdAndUpdate
(danfindOneAndUpdate
) telah berubah menjadifalse
(lihat # 2262 dari catatan rilis ). Ini berarti Anda perlu secara eksplisit mengatur opsitrue
untuk mendapatkan versi baru dari dokumen tersebut, setelah pembaruan diterapkan:Model.findByIdAndUpdate(id, updateObj, {new: true}, function(err, model) {...
sumber