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

Mongoose如何通过findOneAndUpdate实现views字段原子自减操作

错误原因

你报错是因为{views: views--}里的views被识别为JavaScript变量,你没有提前声明该变量自然会抛出未定义错误,同时这种写法也不能直接引用数据库当前存储的views字段值做运算,需要用MongoDB内置的原子更新操作符实现。


正确代码(和你原逻辑完全对齐,保留随机skip规则)

const a1 = await model.findOneAndUpdate(
  { type: 3 },
  { $inc: { views: -1 } },
  { new: true }
).skip(random)
return a1

说明

$inc是MongoDB专用的增量更新操作符,传入负值就可以实现字段自减的效果,而且属于原子操作,比你先查询再修改再保存的写法更适合高并发场景,不会出现多请求同时修改导致的计数不准问题。
如果是适配其他关系型数据库(比如MySQL),对应写法可以直接在更新语句里写views = views - 1即可,不需要额外操作符。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 17:06:02