查找和修改,获取数据,处理数据并保存 - Mongoid

时间:2013-05-30 12:53:13

标签: ruby-on-rails mongodb mongoid

我在我的Rails应用程序中使用Mongoid,发现只要查找操作成功,我就可以使用find_and_modify命令更新文档。

考虑文档结构

下面的集合User
  • 名称

所以文档保存为

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

现在我如何在获取记录后立即更新积分计数,有没有办法像下面这样做

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

即,系统应该获取存储的点并将其递增1并再次保存。

请建议。

2 个答案:

答案 0 :(得分:4)

感谢詹姆斯的链接。

得到了解决方案

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

根据mongoid.org/en/mongoid/docs/querying.html - James Wahlin的评论。

答案 1 :(得分:0)

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

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

这将找到具有给定ID(或您查询的任何内容)的所有记录,将点值增加100,然后再次保存。很漂亮。您也可以在任何mongoid查询或单个记录上调用它,因此User.find("some-id").inc(:points, 100)User.first.inc(:points, 100)也可以正常工作。