![](/img/trans.png)
[英]Mongoose Error: `{“message”:“No matching document found.”,“name”:“VersionError”}`
[英]Mongoose VersionError: No matching document found for id when document is being saved
通过“ / sync /” API请求同步用户购物车时,我反复看到以下错误。 每当用户更改购物车的内容时,就会调用此方法。
VersionError:找不到ID为“ 2y4b1hq601cd013e0af25e32”版本4的匹配文档,位于VersionError.MongooseError [as构造函数]处的路径“ cart,cart.items,cart.updatedAt”(/node_modules/mongoose/lib/error/mongooseError.js:13:11 )的新版本错误(/node_modules/mongoose/lib/error/version.js:18:17)的生成版本错误(/node_modules/mongoose/lib/model.js:398:10)的model.Model.save(/ node_modules /在/controllers/shoppingCart/index.js:48:14在/node_modules/mongoose/lib/model.js:4670:16在/ node_modules / mongoose / lib / utils处的mongoose / lib / model.js:460:27)。 _hooks.execPost(/node_modules/mongoose/lib/query.js:4065:11)处的js:258:16在/node_modules/kareem/index.js:135:16处的process._tickCallback(internal / process / next_tick.js) :61:11)
确切的代码行如下:
req.session.save();
delete user.__v;
>> user.save();
return res.send();
我已经尝试过user.increment(),但这似乎不能解决此问题,也不能删除user .__ v。我假设这是相互冲突的版本,并且想要对用户对象进行版本控制,我只需要强制将购物车始终同步到最新版本。
虽然看起来.save()是此处的正确方法,但.update()命令将完成工作,而忽略了导致此错误发生的“竞争条件”。 Mongo DB引发此错误,因为它担心我要保存已更新的旧版本文档:
更好的方法是将v1发送到客户端,并且当购物车对象发生更改时,无论如何都将其与新的购物车对象同步。 这可以通过.update()而不是.save()完成 。
这是因为.save() 监视并关心版本控制,而.update()会更新对象,而不考虑版本控制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.