Mongoose.save() 似乎并没有真正改变数据库中的任何内容

问题描述 投票:0回答:1

我正在尝试更新 MongoDB 数据库中数组中的对象。我似乎并没有在谷歌上搜索这个问题,而且 Mongo 似乎没有返回任何错误,所以我有点卡住了。

这是我的代码:

const { SnagList } = require("../models/schemaModel.js");
//get the details of the snag update from the request object, get the relevant customer from the database, loop through the snags array and update with the new info we just received in the request
const snagUpdate = async (req, res) => {
  const snagId = req.body.update.id;
  const snagLocation = req.body.update.location;
  const snagDescription = req.body.update.snagDetails;
  try {
    const list = await SnagList.findById(req.body.customerId);

    list.snags.forEach((snag) => {
      if (snag.id === snagId) {
        snag.location = snagLocation;
        snag.snagDetails = snagDescription;
      }
    });

    await list.save();

    res.send("Snag update processed");
  } catch (err) {
    console.error(err);
    res.send("Error during update process");
  }
};

module.exports = snagUpdate;

所以我想做的是通过 ID 检索“snaglist”,然后循环遍历列表并进行修改,然后保存它。当我使用 save() 保存时,它似乎执行了该操作,因为它没有返回任何错误。问题是,当我检查数据库更新时,它实际上没有做任何事情。

如果它有助于解决任何问题,我尝试将一个新对象推送到列表数组中,它似乎工作正常。据我所知,猫鼬文档似乎没有提到任何有关此类问题的信息。

node.js mongoose
1个回答
0
投票

const list =等待SnagList.findById(req.body.customerId);

这一行返回一个promise,而不是一个JavaScript对象;因此,不可能对这个承诺进行任何更新操作。

要进行任何 CRUD 操作,您必须使用“then-catch”结构:

SnagList
.findById(req.body.customerId)
.then((list) => {
    // Perform your operations here.
}).catch((err) => console.error(err));
© www.soinside.com 2019 - 2024. All rights reserved.