使用 Rails 中的 postgres json 字段更新嵌套键
Update nested key with postgres json field in Rails
我一直在尝试更新以下内容:
{"boxes": {"book": 2, "moving": 2}, "goods": {}}
至:
{"boxes": {"book_new": 2, "moving": 2}, "goods": {}}
不使用正则表达式或在 ruby 中这样做。但似乎有点棘手。
我想添加新密钥然后删除旧密钥,我不熟悉语法并且在互联网上找不到太多。
我能够向数据添加新元素,但不能向嵌套框添加新元素!!
像那样:
Update moves SET data = data::jsonb || '{"bookasas": 2}' WHERE data ->> 'boxes' LIKE '%book%';
感谢任何帮助。
没有替换json键的功能,所以你应该删除旧对象并添加新对象:
update moves
set data = jsonb_set(
data::jsonb,
array['boxes'],
(data->'boxes')::jsonb - 'book' || jsonb_build_object('book_new', data->'boxes'->'book')
)
where data ->> 'boxes' like '%book%'
returning *;
data
------------------------------------------------------
{"boxes": {"moving": 2, "book_new": 2}, "goods": {}}
(1 row)
我一直在尝试更新以下内容:
{"boxes": {"book": 2, "moving": 2}, "goods": {}}
至:
{"boxes": {"book_new": 2, "moving": 2}, "goods": {}}
不使用正则表达式或在 ruby 中这样做。但似乎有点棘手。 我想添加新密钥然后删除旧密钥,我不熟悉语法并且在互联网上找不到太多。
我能够向数据添加新元素,但不能向嵌套框添加新元素!! 像那样:
Update moves SET data = data::jsonb || '{"bookasas": 2}' WHERE data ->> 'boxes' LIKE '%book%';
感谢任何帮助。
没有替换json键的功能,所以你应该删除旧对象并添加新对象:
update moves
set data = jsonb_set(
data::jsonb,
array['boxes'],
(data->'boxes')::jsonb - 'book' || jsonb_build_object('book_new', data->'boxes'->'book')
)
where data ->> 'boxes' like '%book%'
returning *;
data
------------------------------------------------------
{"boxes": {"moving": 2, "book_new": 2}, "goods": {}}
(1 row)