2013-05-30 63 views
2

我在我的Rails應用程序中使用Mongoid,發現只要找到操作成功,我就可以使用find_and_modify命令更新文檔。查找並修改,獲取數據,處理數據並保存 - Mongoid

考慮集合User下面的文檔結構

所以文檔保存像

{ "_id" : "51a7420eb09de918204883c4", "name" : "balan", "points" : 1727 } 

現在我要如何更新點作爲計數一旦我取得記錄,是否有任何方法可以做到低

User.where(id: "51a7420eb09de918204883c4").find_and_modify("$set" => { points: points + 1 }) 

即,系統應該獲取存儲的點並將其增加1並將其保存回去。

請建議。

+0

嘗試使用$ inc爲此。在這個頁面上有一個使用$ inc進行更新的例子:http://mongoid.org/en/mongoid/docs/querying.html –

+0

你不需要find_and_modify。更新會做你想做的事情(找到文件,更新它)。 find_and_modify是當你需要文件然後原子返回給你。 –

回答

4

感謝您的鏈接詹姆斯。

得到了解決

User.where(id: "51a7420eb09de918204883c4").find_and_modify({ "$inc" => { points: 1 } }) 

按照mongoid.org/en/mongoid/docs/querying.html - 詹姆斯Wahlin的意見。

+0

輕微的錯字。從$ inr更改爲$ inc –

0

正如詹姆斯所說,增量是要走的路:

User.where(id: "51a7420eb09de918204883c4").inc(:points, 100) 

這將找到具有給定ID的所有記錄(或任何你查詢),由100增加的價值點,並再次保存。相當漂亮。您可以在任何mongoid查詢或個人記錄中調用它,因此User.find("some-id").inc(:points, 100)User.first.inc(:points, 100)也可以使用。