我在 Rails 项目(均为 4.0.x)中使用 Mongoid,并且我有一个带有哈希字段的文档,该字段存储一些无模式数据。
class Thing
field :name, type: String
field :mass, type: Integer
field :info, type: Hash
end
使用此设置,我可以查询具有如下键的内容:endDate
:
Thing.where("info.endDate"=>{'$exists'=>true})
这一切都很好,很方便。为该字段使用哈希字段:info
很好,因为我要存储的内容没有固定的模式,并且因一件事而异。
好的,但是,我不能对哈希$set
中的键/值对使用相同的点语法。:info
[1]
thing.set("info.endDate"=>Time.now)
引发Mongoid::Errors::UnknownAttribute
错误。
它告诉我我必须Mongoid::Attributes::Dynamic
在我的模型中加入才能做到这一点,但这对我来说似乎不合适。哈希字段类型的重点似乎是允许您使用没有固定模式的数据。我似乎不必包含一个特殊的“动态属性”模块来使用哈希字段。
所以现在,我正在使用常规的旧[]
语法更新值,然后调用save
模型,如下所示:
thing.info[:endDate] = Time.now
thing.save
但很多时候,它会更好地体现$set
价值。是否有其他语法用于设置哈希字段值?我对上述错误消息和动态属性有误吗?我现在是否坚持对哈希字段进行两步更新?
[1] 诚然,我最近从 mongomapper 迁移过来,所以我对这种语法的期望部分是因为之前在 mongomapper 中能够做到这一点。