Mongoose save() not saving changes

女生的网名这么多〃 提交于 2021-02-11 12:28:02

问题


I have a fully functioning CRUD app that I'm building some additional functionality for. The new functionality allows users to make changes to a list of vendors. They can add new vendors, update them and delete them. The add and delete seem to be working just fine, but updating doesn't seem to be working even though it follows a similar method I use in the existing CRUD functionality elsewhere in the app. Here's my code:

// async function from AXIOS request
const { original, updatedVendor } = req.body;
let list = await Vendor.findOne({ id: 1 });

if (!list) return res.status(500).json({ msg: 'Vendors not found' });

let indexOfUpdate = list.vendors.findIndex(
  (element) => element.id === original.id
);

list.vendors[indexOfUpdate].id = updatedVendor.id;
list.vendors[indexOfUpdate].name = updatedVendor.name;

const updated = await list.save();
res.json(updated);

The save() isn't updating the existing document on the DB side. I've console logged that the list.vendors array of objects is, indeed, being changed, but save() isn't doing the saving.

EDIT: A note on the manner of using save, this format doesn't work either:

list.save().then(res.json(list));

EDIT 2: To answer the questions about seeing the logs, I cannot post the full console.log(list.vendors) as it contains private information, however, I can confirm that the change made to the list is showing up when I run the following in the VendorSchema:

VendorSchema.post('save', function () {
  console.log(util.inspect(this, { maxArrayLength: null }));
});

However, the save still isn't changing the DB side.


回答1:


Since you are using nested objects, Mongoose will not be able to detect the changes made. You need to mark the modified as an object before the save

list.markModified('vendors');


来源:https://stackoverflow.com/questions/61955931/mongoose-save-not-saving-changes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!