天天看点

Nosql Mongodb 并发控制之乐观锁

我们知道sql中并发控制采用的乐观锁就是在记录中增加版本号或timestamp,那么mongodb中如何实现呢?

Mongodb不善于处理事务,但提供了findAndModify命令。该命令允许对文档进行原子性更新,并在同一次调用中返回:

代码如如:

db.collection_yown.findAndModify(
    {
      query:{"name":"yown"},update:{"version":},new:true or false
    }
)
           

默认情况下,findAndModify命令会返回更新前的文档,要是返回修改后的文档,就把new设置为false.

Mongodb同时也提供update命令,这两者的区别如下:

update和findAndModify都可以用做更新操作;

区别

findAndModify是有返回值的,输出中的value字段即返回修改之前的文档,使用 new:true选项返回修改后的文档。 update是更新操作,是没有返回值的。

findAndModify 强调操作的原子性(atomically),比如用来实现自增1的操作或者操作队列。属于 get-and-set 式的操作,一般来讲,findAndModify 比update操作稍慢,因为需要等待数据库的响应。

另外findAndModify ,其中modify可以是update,还可以是remove

{
findAndModify: <string>,
query: <document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>
}