Min*_*ure 5 postgresql json ruby-on-rails jsonb
我在 postgres 表列中存储了一个大的 json 对象,模式的一个例子是这样的:
create_table “document” do |t|
t.jsonb “data”, default: []
end
Run Code Online (Sandbox Code Playgroud)
目前我正在更新列中的 json,如下所示:
# find document in rails then…
doucment.data[‘some_attribute’][2][‘another_attribute’] = 100
doucment.save
Run Code Online (Sandbox Code Playgroud)
然而,我多次写入这个 json 属性,有时数据会丢失,因为如果两个调用同时写入它,那么整个对象将被保存或覆盖当前对象的旧数据。
例如,如果有两个不同的保存同时通过以下
保存1:
doucment.data[‘some_attribute’][2][‘another_attribute’] = 100
doucment.save
Run Code Online (Sandbox Code Playgroud)
保存2:
doucment.data[‘some_attribute’][2][‘different_attribute’] = 200
doucment.save
Run Code Online (Sandbox Code Playgroud)
那么其中一个属性数据将丢失,因为另一个将保存它的 json 但带有尚未刷新的旧数据。
使两个调用正确保存新数据的最佳方法是什么。
是否有任何 json 方法可以进入并更新一个属性,例如update_attribute但是对于 jsonb 属性?
Postgresql有这个jsonb_set方法。您可以使用此方法更新您的模型。
使用此代码,记录将在单个查询中更新:
Document.where(id: document.id).update_all(
"data = jsonb_set(data, '{some_attribute,2,another_attribute}', to_json(#{your_int_value}::int)::jsonb)"
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1455 次 |
| 最近记录: |