Rails + mongoid:update_all(“position = position-1”)?

时间:2012-02-04 18:52:04

标签: ruby-on-rails mongodb mongoid increment

Rails + Mongoid是否可行:

Model.update_all("position=position-1")

3 个答案:

答案 0 :(得分:2)

虽然没有直接等同于这个习惯用法(将字段设置为文档某些字段的某个函数),但有一种方法可以进行这种精确更新。

Model.collection.update({},  # find all documents
                        {'$inc' => {:position => -1}}, # decrement position
                        :multi => true) # multi-update (update all)

这是使用底层的mongodb驱动程序来完成这项工作。我不知道如何在Mongoid界面中表达这一点。

答案 1 :(得分:0)

当然可以! 没有选择(更新所有集合):

Model.update_all(obsolete: false)

或选择:

Model.where(:id.in => ids_array).update_all(obsolete: true)

答案 2 :(得分:0)

这有效:

Model.all.inc(:position, -1)