在路径“ _id”上执行更新将修改不可变字段“ _id”

时间:2019-05-28 21:56:24

标签: javascript node.js mongodb mongoose

我正在尝试更新mongo数据库中的字段。但是,出现空心错误。

  

MongoError:对路径“ _id”执行更新会修改   不变字段“ _id”

我要更新的代码。

app.put("/api/inventory/:sku", (req, res, next) => {
  const inventory = new Inventory({
    _id: req.body.id,
    sku: req.body.sku,
    total_qty: req.body.total_qty,
    current_qty: req.body.current_qty
  });
  Inventory.updateOne({ sku: req.params.sku }, req.body).then(result => {
    res.status(200).json({ message: "Update successful!" });
  });
});

2 个答案:

答案 0 :(得分:2)

似乎您只需要更新一条Inventory记录。您可以简单地做到这一点:

app.put("/api/inventory/:sku", (req, res, next) => {
  return Inventory.updateOne(
    { sku: req.params.sku },  // <-- find stage
    { $set: {                // <-- set stage
       id: req.body.id,     // <-- id not _id
       sku: req.body.sku,
       total_qty: req.body.total_qty,
       current_qty: req.body.current_qty
      } 
    }   
  ).then(result => {
    res.status(200).json({ message: "Update successful!" });
  });
});

您无需创建新的Inventory等,因为您需要做的就是基于sku

更新现有的内容。

有关updateOne

的更多文档

答案 1 :(得分:0)

_id是自动生成的-有关其含义的更深入说明,请参见this answer

您无法创建此字段-它是在创建任何新文档时创建的。您需要使用id字段(不加下划线_):

const inventory = new Inventory({
  id: req.body.id,
  sku: req.body.sku,
  total_qty: req.body.total_qty,
  current_qty: req.body.current_qty
});