(节点:17348)UnhandledPromiseRejectionWarning:MongoError:对路径“_id”执行更新将修改不可变字段“_id”
Posted
技术标签:
【中文标题】(节点:17348)UnhandledPromiseRejectionWarning:MongoError:对路径“_id”执行更新将修改不可变字段“_id”【英文标题】:(node:17348) UnhandledPromiseRejectionWarning: MongoError: Performing an update on the path '_id' would modify the immutable field '_id' 【发布时间】:2021-08-12 15:20:07 【问题描述】:尝试更新时出现此错误....mongoose 在使用以下代码时抛出此错误....尝试使用 const project = ... 而不是 new Product(...)但没有运气。
router.put("/:id", multer(storage: storage).single("image") , (req, res, next) =>
let imagePath = req.body.imagePath;
if (req.file)
const url = req.protocol + "://" + req.get("host");
imagePath = url + "/images/" + req.file.filename
const product = new Product(
_id: req.body.id,
title: req.body.title,
cost: req.body.cost,
description: req.body.description,
imagePath: imagePath
) ;
console.log(product)
Product.updateOne(_id: req.params.id, product)
.then(result =>
console.log(result);
res.status(200).json( message: "Update Successful !!");
);
);
【问题讨论】:
您的问题找到解决方案了吗? 【参考方案1】:您需要从用于更新文档的对象中删除键 _id
。
const product = new Product(
title: req.body.title,
cost: req.body.cost,
description: req.body.description,
imagePath: imagePath
) ;
这将解决您的问题。
问题是,在更新 _id
与您在代码中传递的文档匹配的文档时,
Product.updateOne(_id: req.params.id, product)
您也在尝试更新_id
字段的值。 _id
默认是不可变的,这意味着它不能被更新,因为它代表了文档的唯一性。
编辑:如果您还需要更新文档的_id
,那么您可以从此处获取参考来执行此操作。虽然_id
不能直接更新,但是有一个解决方法。
How to update the _id of one MongoDB Document?
【讨论】:
以上是关于(节点:17348)UnhandledPromiseRejectionWarning:MongoError:对路径“_id”执行更新将修改不可变字段“_id”的主要内容,如果未能解决你的问题,请参考以下文章
poj2752 Seek the Name, Seek the Fame