我在通过"/sync/" API请求)同步用户时,我会反复看到以下错误。每当用户更改购物车的内容时,这都是称为的。
versionerror:没有找到ID的匹配文档 " 2Y4B1HQ601CD013E0AF25E32"版本4 ModifiedPaths"购物车,CART.Items, CART.UPDATEDAT" 在versyerror.mongooseerror [作为构造函数](/node_modules/mongoose/lib/error/mongooseerror.js:13:11) 在new versionerror(/node_modules/mongoose/lib/error/version.js:18:17) 在GenerateVersionError(/node_modules/mongoose/lib/model.js:398:10) at model.model.save(/node_modules/mongoose/lib/model.js:460:27) at/controllers/shoppingcart/index.js:48:14 at/node_modules/mongoose/lib/model.js:4670:16 at/node_modules/mongoose/lib/utils.js:258:16 at _hooks.execpost(/node_modules/mongoose/lib/query.js:4065:11) at/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(),但这似乎没有解决此问题,也没有删除用户。始终与最新版本同步的购物车。
虽然它将出现 .save()是正确的方法,但 .update()命令将获得工作在忽略导致此错误的"种族条件"时完成。Mongo DB正在抛出此错误,因为它担心我保存了已经更新的文档的较旧版本:
- V1发送给客户端
- V1保存,并在Mongo DB中更新为V2
- V1试图再次保存,但是Mongo DB已经存储了V2,错误被丢弃
一种更好的方法是将V1发送给客户端,并且当CART对象更改时,无论如何将对象与新的CART对象同步。这可以通过 .update()而不是通过 .save()。
这是因为 .save()手表和关心版本控件,而 .update()将更新对象,而无论版本控制。
它对我失败了,因为我获取并尝试更新的文档的_id
字段被存储在DB中,而不是objectid。
检查该特定的user._id
数据类型是什么。
如果是字符串 - 您需要插入新文档并删除现有的文档以修复它,因为_id
字段是不可能的。