MongoDB更新报错Cast to ObjectId failed for value原因排查
报错核心原因
你触发CastError: Cast to ObjectId failed for value的根本原因是Mongoose的findById方法使用错误:findById是Mongoose专门用于查询MongoDB默认生成的_id主键字段的语法,仅支持直接传入_id对应的字符串/数值参数,不支持传入自定义查询对象。你给该方法传入了{itemId: coinId}格式的对象,Mongoose会尝试将整个入参强制转换为ObjectId类型,转换失败就抛出了该报错。
解决方案
根据你的实际查询逻辑二选一修改即可:
- 如果你是要通过MongoDB默认的
_id字段查询币种,将查询语句修改为:
const coin = await Coin.findById(coinId);
- 如果你是要通过自定义的
itemId字段查询币种,不要使用findById,改用findOne方法传入查询对象:
const coin = await Coin.findOne({ itemId: coinId });
额外注意事项
你当前的代码还存在隐藏报错风险:你仅从req.body中解构了coinId、seconds、bidAmount三个字段,但后续给coin对象赋值时用到的coinImage、coinTitle、bids、timeLeft、currentBid变量均未定义,后续运行时会抛出变量未定义的报错,需要补充对应字段的解构或赋值逻辑。
内容的提问来源于stack exchange,提问作者deagleshot32
相关产品推荐
相关产品推荐

