我們知道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>
}