2011-07-02

MongoDB 的 findAndModify 指令

MongoDB 從  1.3.0 版之後,開始提供 findAndModify 的指令來更新已經儲存在資料庫的文件 ( Documents),這個 findAndModify 和 update 的功能相似,但是,用途是不太一樣的,update 只可以更新文件,但是,這個 findAndModify 還可以傳回已經更新過的文件哩 ! 另外,由於 findAndModify 指令是採用 Atomic operation 的方式 ( 就是只有寫成功和沒寫二種狀態的方式 ) 來寫入資料,所以,也可以拿來當做 MongoDB 的 lock 功能用。

阿舍會注意到這個 findAndMondify 指令,是因為阿舍要弄一個自動增號的功能,這個功能在 MySQL 要將欄位設定成自動增號就可以了,但是,MongoDB 是要靠自己弄的,所以,阿舍才會找要用這個 findAndModify 指令哩 ! 才發現,這個指令還有用的啊 !

findAndModify 指令總共有 7 個參數可用,但是,阿舍並沒有要一一說明,而是要用一個簡單的案例來說明,這樣,只要懂了怎麼用,那麼其它參數就不難懂了哩 ! 以阿舍要對 news 這個 collections 的 _id 是 888 的這份文件變更 subject 欄位為例,可以在 mongoDB 的  Shello 用下面的指令來操作達成:

> doc= db.news.findAndModify( {
      query : { _id : 888 },
      update : { $set : { subject : "test 2" }} ,
      new : true
      });

query 後面是要放要更改的文件的搜尋條件,阿舍的例子是要改 _id 是 888 的這一個文件。

update 後面要放的是要修改內容,其中的 $set 是mongoDB 內建的運算子,用來變更欄位值,阿舍的例子是要把 subject 這個欄位值改成 "test 2”。

new 後面的 ture 是用來指示 MongoDB 需要把更新後的文件給回傳回來,true 就是要,false 就是不要囉 !


推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁