通过“ / sync /” API请求同步用户购物车时,我反复看到以下错误。每当用户更改购物车的内容时,就会调用此方法。
VersionError:找不到与ID相匹配的文档 “ 2y4b1hq601cd013e0af25e32”第4版经过修改的路径“购物车,cart.items, cart.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(internal / process / next_tick.js:61:11)
确切的代码行如下:
req.session.save();
delete user.__v;
>> user.save();
return res.send();
我已经尝试过user.increment(),但是这似乎不能解决这个问题,也不能删除user .__ v。我假设这是相互冲突的版本,并且想要对用户对象进行版本控制,我只需要强制执行购物车以始终同步到最新版本。
答案 0 :(得分:1)
虽然此处显示 .save()是正确的方法,但 .update()命令将完成工作,而忽略了“竞争条件”导致发生此错误。 Mongo DB引发此错误,因为它担心我要保存已更新的旧版本文档:
一种更好的方法是将v1发送到客户端,并且当购物车对象发生更改时,无论如何,都要将该对象与新的购物车对象同步。可以通过 .update()来完成,而不是通过 .save()。
这是因为 .save()会监视并关心版本控制,而 .update()会更新对象,而不考虑版本控制。