【问题标题】:Mongoose save() not saving changesMongoose save() 不保存更改
【发布时间】:2020-05-22 23:00:08
【问题描述】:

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

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

【问题讨论】:

  • .删除const updated .尝试返回list
  • @AnkushVerma 我做到了。这是基于 save() 的 Mongoose 文档解决问题的新尝试。之前只是list.save().then(res.json(list)) 也没有保存。
  • 您是否可以提供任何错误?
  • 尝试将此代码添加到您的模型中。 SchemaName.post('save',function(){ console.log(this)})
  • 1- 你确定在 db 中有一个 id = 1 的供应商吗? .... 2-如果是,console.log(list),并检查它是否有供应商数组? .... 3- console.log(indexOfUpdate) 太...您能否将所有这些日志添加到问题中,以及供应商模式?

标签: javascript mongodb mongoose


【解决方案1】:

由于您使用的是嵌套对象,Mongoose 将无法检测到所做的更改。需要在save之前将修改过的对象标记为对象

list.markModified('vendors');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2016-02-05
    • 2014-10-27
    • 1970-01-01
    • 2012-07-04
    • 2017-12-07
    • 2019-01-06
    相关资源
    最近更新 更多