多个mongoid哈希值的Atomic inc

时间:2014-06-26 04:51:28

标签: ruby-on-rails ruby ruby-on-rails-3 mongoid mongoid3

我有一个带有哈希字段的Mongoid模型,如下所示:

class DimensionStat
 include ::Mongoid::Document
 include ::Mongoid::Timestamps

 field :data, type: Hash

 attr_accessible :data
end

我用

之类的东西假装运行时填充数据
data: {
    'a' => 1,
    'b' => 2,
    ...
}

我需要以原子方式对多个键执行增量,例如:

'a' => -1,
'b' => 5

某处我发现:

instance.collection.find(_id: my_id).update("$inc" => {'data.a' => -1,
'data.b' => 5})

会做的伎俩,但它没有,我做错了什么?

更新: 我使用的是mongoid 3.1.6

1 个答案:

答案 0 :(得分:3)

.inc方法与不存在的键完美配合,但文档不会自动从数据库刷新。尝试:

dimension_stat.inc('data.a' => -1, 'data.b' => 5)
puts dimension_stat.data['a'] # not changed
dimension_stat.reload
puts dimension_stat.data['a'] # changed

你会看到计数器已经改变了。