我有一些非常大的文件。由于嵌入和数组字段。一个例子如下:
{
"_id" => BSON::ObjectId('5654b4b3204528cfa0000001'),
"rating" => 0,
"status" => :ok,
"foo" => '...',
"bar" => '...',
# a few fields
"group_ids" => [
BSON::ObjectId('55ba5d5420452896a8000007'),
BSON::ObjectId('5602bf4c2045289107000001')
],
"events": [
{
"_id" => BSON::ObjectId('5654b4b3204528cfa0000002'),
"field_a" => '...',
"field_b" => '...',
}
# more than 200 entries
]
}
例如,可能有数百个事件并且不超过十个 group_id。对于我的应用程序,我需要一些字段,但我不能返回事件(它很慢)。
在版本 3 Mongoid 中,我过滤了必要的字段,执行了我的操作并更改了其中一些返回的字段:
entry = Model.without(:events).first
# Change some fields, for example:
entry.rating = 3
entry.status = :error
entry.save
# Mongoid 4: raise Mongoid::Errors::ReadonlyDocument
但是 Mongoid 4:“现在使用 #only 或 #without 从标准加载的文档现在在尝试保存时会引发错误”。
我无法使用原子操作来解决它,因为我的模型具有回调(after_save,before_update),这些回调(after_save,before_update)取决于字段(ActiveModel::Dirty)的先前状态,例如status_changed?
,group_ids_change
。
他们可以帮助我提出任何建议吗?