【发布时间】:2014-08-16 20:07:02
【问题描述】:
我有一个 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
【问题讨论】:
-
“不起作用”是什么意思?我一直在做这种事情,而且效果很好。
data在 MongoDB 中的该文档中看起来像什么?顺便说一句,:$inc是一个有效符号,所以如果你愿意,可以说:$inc => { ... }。 -
无论如何,我每次都得到空哈希
-
但是
data在 MongoDB 中的样子在你尝试对它做任何事情之前呢? -
文档中不存在,更新该字段时没有用mongoid动态创建?
-
不,MongoDB 不会为您自动激活哈希。你使用
:$inc来增加已经存在的东西。
标签: ruby-on-rails ruby ruby-on-rails-3 mongoid mongoid3