【问题标题】:Updating an item in Mongoose not working --- save is not a function在 Mongoose 中更新项目不起作用 --- 保存不是功能
【发布时间】:2020-08-21 20:10:47
【问题描述】:

我正在制作一个非常简单的应用程序来练习使用 Node、MongoDb 和 Mongoose 来处理我的数据库的 CRUD 操作,但我在它的更新部分遇到了问题。

这是我的代码:

// update
app.patch('/api/update', async (req, res) => {
  const { product, price } = req.body;
  try {
    let productToBeUpdated = await Product.find({ product: product });
    productToBeUpdated.price = price;
    productToBeUpdated.save();
  } catch (err) {
    res.json({ status: 'failed, no such product' });
    console.error(err);
  }

  res.json({ status: 'successfully updated' });
});

我期待Product.find({ product: product }) 检索与req.body.product 发送的产品匹配的任何产品。然后我想更新该产品的价格。然后我想将更新的产品保存到数据库中。但是我收到一个错误:productToBeUpdated.save is not a function

如何让 mongoose 将更改保存到数据库?

【问题讨论】:

  • 你能做到Product.findOne({ product: product })吗?那么它的行为会有所不同吗?
  • 我问这个是因为在纯 mongodb 中,find() 将返回一个游标以遍历找到的所有元素,而 findOne() 将只返回一个匹配元素。
  • 有一个你想做的API;尝试findOneAndUpdate 为await Product.findOneAndUpdate({ product }, { price })

标签: javascript node.js mongodb express mongoose


【解决方案1】:

我相信您遇到的问题是 productToBeUpdated 在这种情况下将是一个数组(默认情况下没有 save 方法);由Model.find 返回。

假设您想要更新product 的所有匹配项的逻辑:

我期望 Product.find({ product: product }) 检索与 req.body.product 发送的产品匹配的任何产品。

为了实现你的逻辑,我们可以使用Model.updateMany:

const result = await Product.updateMany({ product }, { price });

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 2020-12-01
    • 2023-03-17
    • 2013-12-29
    • 1970-01-01
    • 2010-10-20
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多