猫鼬save()不保存更改

时间:2020-05-22 13:14:13

标签: javascript mongodb mongoose

我有一个功能全面的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 }));
});

但是,保存仍然没有改变数据库方面。

1 个答案:

答案 0 :(得分:3)

由于您使用的是嵌套对象,因此Mongoose将无法检测到所做的更改。您需要在save

之前将修改的对象标记为对象
list.markModified('vendors');