我在我的Rails应用程序中使用Mongoid,发现只要查找操作成功,我就可以使用find_and_modify
命令更新文档。
考虑文档结构
下面的集合User
所以文档保存为
{ "_id" : "51a7420eb09de918204883c4", "name" : "balan", "points" : 1727 }
现在我如何在获取记录后立即更新积分计数,有没有办法像下面这样做
User.where(id: "51a7420eb09de918204883c4").find_and_modify( "$set" => { points: points + 1 } )
即,系统应该获取存储的点并将其递增1并再次保存。
请建议。
答案 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)
也可以正常工作。