我不明白Mongoid的原子方法推动。
我有这个文件:
class Campaign
include Mongoid::Document
field :messages, :type => Array # Array of hashes
end
现在在控制台中播放它但消息却没有持续存在。一个例子:
>> campaign = Campaign.last
=> #<Campaign _id: 4dc2b6617e296d53f000000d,...
>> data = {:from => 'user@example.com'}
=> {:from=>"user@example.com"}
>> campaign.push(:messages, data)
=> [{:from=>"user@example.com"}]
日志现在说:
MONGODB blabla_development['campaigns'].update({"_id"=>BSON::ObjectId('4dc2b6617e296d53f000000d')}, {"$push"=>{:messages=>{:from=>"user@example.com"}}})
但如果再次查询此文档,则消息字段为nil:
>> campaign = Campaign.last
=> #<Campaign _id: 4dc2b6617e296d53f000000d,...
>> campaign.messages
=> nil
如何保留此数据?
由于
答案 0 :(得分:1)
你不是在推送一个数组,而是一个哈希。如果您希望mongodb回答“成功”或“失败”,而不是“确定,无论如何”,请启用安全模式 mongoid (mongomapper)。
启用安全模式,试试这个
campaign.safe_mode?(:safe => true) #then carry on. warning, I haven't tested...
push(... ,:safe => true) #mongomapper
或更改config
persist_in_safe_mode true
在任何情况下,在开发环境中都应该是真的。
解决问题:
#to use array instead of hash, do
data = ["elem1", "elem2"]
#or
campaign.messages << "elem1"
campaign.messages << "elem2"
campaign.save!