通过“/sync/”API 请求同步用户购物车时,我反复看到以下错误。每当用户更改购物车的内容时就会调用此函数。
VersionError:找不到 id 的匹配文档
“2y4b1hq601cd013e0af25e32”版本4修改路径“购物车,cart.items,
购物车.updatedAt"
在 VersionError.MongooseError [作为构造函数] (/node_modules/mongoose/lib/error/mongooseError.js:13:11)
在新的 VersionError (/node_modules/mongoose/lib/error/version.js:18:17)
在generateVersionError(/node_modules/mongoose/lib/model.js:398:10)
在 model.Model.save (/node_modules/mongoose/lib/model.js:460:27)
在/controllers/shoppingCart/index.js:48:14
在/node_modules/mongoose/lib/model.js:4670:16
在/node_modules/mongoose/lib/utils.js:258:16
在 _hooks.execPost (/node_modules/mongoose/lib/query.js:4065:11)
在/node_modules/kareem/index.js:135:16
在 process._tickCallback (内部/process/next_tick.js:61:11)
确切的代码行如下:
req.session.save();
delete user.__v;
>> user.save();
return res.send();
我已经尝试过 user.increment() 但这似乎并没有解决这个问题,也没有删除 user.__v 我假设这是版本冲突,并且我希望对我的用户对象进行版本控制,我只需要强制购物车始终同步到最新版本。
虽然它会出现一个.save()是这里正确的方法,。更新()命令将完成工作,同时忽略导致此错误发生的“竞争条件”。 Mongo DB 抛出此错误是因为它担心我正在保存已更新的文档的旧版本:
- v1 发送给客户端
- v1 已保存,并在 Mongodb 中更新为 v2
- v1再次尝试保存,但Mongo DB已经存储了v2,抛出错误
更好的方法是将 v1 发送到客户端,当购物车对象发生更改时,无论发生什么情况,都将该对象与新的购物车对象同步。这可以通过以下方式完成。更新()而不是通过.save().
这是因为.save()关注并关心版本控制,同时。更新()无论版本控制如何,都会更新对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)