Mongodb如何保持数据正确更新
Mongodb如何保持数据正确更新
所谓数据正确更新,就是在并发请求很多的情况下,不会出现被多次更新的情况。比如偷菜,一个人只能偷一次,不能因为同时多点了记下就偷了多次。
这类问题的通常解决办法就是Update if not change!
也就是在更新的时候,判断一下当前数据有没有被其他操作改变,如果没有改变,我才改变它,从而保证不会乱改变。。。实际操作时,把原值也传过去,即可。。。
Mongodb中通过把原值作为查询参数传递过去进行更新,如果原值已经被改变了,则这次更新操作失败,返回的结果记录应该为0,同时提示“updatedExisting”,如果成功了当然是大于0,我们只要判断返回的是不是为0就可以了,为0表示更新失败,告诉用户出错,不为0,继续操作。。。
//开始请求
db.requestStart();
//结束请求,结束前就应该获取lastError以验证是否成功更新
db.requestDone();
//返回最近的一个错误
db.getLastError();
示例代码:
super.requestStart();
super.updateFields(....;
DBObject err = super.getLastError();
if(Boolean.valueOf(""+err.get("updatedExisting")) == false){
super.requestDone();
throw new RuntimeException("update error");
}
super.requestDone();