我有一个功能全面的CRUD应用程序,正在为此构建一些其他功能。新功能使用户可以更改供应商列表。他们可以添加新的供应商,对其进行更新并删除它们。添加和删除似乎工作得很好,但是更新似乎不起作用,即使它遵循我在应用程序中其他地方的现有CRUD功能中使用的类似方法。这是我的代码:
// 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);
save()
不会在数据库端更新现有文档。我已经在控制台上记录到list.vendors
对象数组的确在更改,但是save()
没有保存。
编辑: 关于使用保存方式的说明,这种格式也不起作用:
list.save().then(res.json(list));
编辑2: 为了回答有关查看日志的问题,我无法发布完整的console.log(list.vendors),因为其中包含私人信息,但是,我可以确认对列表所做的更改正在显示当我在VendorSchema中运行以下命令时:
VendorSchema.post('save', function () {
console.log(util.inspect(this, { maxArrayLength: null }));
});
但是,保存仍然没有改变数据库方面。
答案 0 :(得分:3)
由于您使用的是嵌套对象,因此Mongoose将无法检测到所做的更改。您需要在save
list.markModified('vendors');