繁体   English   中英

Mongoose VersionError:保存文档时找不到匹配的ID文档

[英]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引发此错误,因为它担心我要保存已更新的旧版本文档:

  1. v1已发送给客户端
  2. v1已保存,并在Mongo DB中更新到v2
  3. v1正在尝试再次保存,但是Mongo DB已经存储了v2,并引发错误

更好的方法是将v1发送到客户端,并且当购物车对象发生更改时,无论如何都将其与新的购物车对象同步。 这可以通过.update()而不是.save()完成

这是因为.save() 监视并关心版本控制,而.update()会更新对象,而不考虑版本控制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM