You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose字段自增触发CastError类型转换错误求助

问题原因及解决方法

你的错误出在**findByIdAndUpdate的更新参数格式完全写错了**。Mongoose的$inc是顶层操作符,不能嵌套在字段值里。你现在写的{ times_dealt: { $inc: 1 } },相当于要把times_dealt字段设置成一个{ $inc:1 }的对象,但你的Schema里这个字段是Number类型,所以触发了类型转换错误。

正确写法

把更新参数改成顶层的$inc操作:

await Answer.findByIdAndUpdate(randomAnswerID, {
    $inc: { times_dealt: 1 }
});

额外优化建议

你现在先执行findById查文档,又执行findByIdAndUpdate更新,其实可以合并成一次查询,用new: true选项直接获取更新后的文档,减少数据库请求:

// 替换原来的两次查询
const updatedAnswer = await Answer.findByIdAndUpdate(
    randomAnswerID,
    { $inc: { times_dealt: 1 } },
    { new: true } // 返回更新后的文档
);

// 后续序列化直接用updatedAnswer
const serializedAnswer = { _id: updatedAnswer._id, body: updatedAnswer.body };

这样既解决了错误,又优化了性能。

内容的提问来源于stack exchange,提问作者Tsabary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:41:07